آموزش interface در شی گرایی

تاریخ: 07 اردیبهشت 1400

کلاس interface مانند کلاس abstract، ایجاد کننده یک سری متد است که همه ی subclass ها را مجبور کند همه ی آن متدها را داشته باشند.

کلاس interface چیست؟

هنگامی که مشغول برنامه نویسی یک اپلیکیشن به صورت تیمی هستید، عموما پیاده سازی بخشی از آن، نظیر یک یا چند کلاس به شما واگذار می شود.

مدیر تیم برای اینکه مطمئن شود ساختار برنامه منظم شده و همه چیز درست پیش می رود، یک سری متدها را الزام میدارد تا در کلاس های مشخص و توسط همه ی برنامه نویس ها استفاده شود.

کلاس interface دقیقا جایی است که آن متدهای ضروری نشانه گذاری می شوند. لازم است تمام subclass های کلاس interface، متدهای آن کلاس را تعریف کنند.

 

تعریف کلاس interface

برای ساختن یک کلاس interface از کلمه کلیدی interface استفاده می کنیم و سپس نام interface خود را قرار می دهیم.

نام interface از قوانین نام گذاری کلاس ها در php پیروی می کند.

interface interfaceName { /* --- */ }

 

تعریف subclass از کلاس interface

برای اینکه یک کلاس، از کلاس interface ما extend شود، لازم است از کلمه implements استفاده کنیم:

class User implements interfaceName { /* --- */ }

 

مثال عملی استفاده از interface

اکنون می خواهیم یک interface ماشین ایجاد کنیم و به همه ی کلاس های ماشین این دستور را بدهیم که دو متد go و stop را داشته باشند:

interface Car { 
    function go();
    function stop();
}
class Z4 implements Car { 
    function go(){ /* -- */ }
    function stop(){ /* -- */ }
}
class Lexus implements Car { 
    function go(){ /* -- */ }
    function stop(){ /* -- */ }
}

مشاهده می کنید که هر دو کلاس z4 و lexus باید حاوی متدهای go و stop باشند.

متدهای interface نباید بدنه داشته باشند. در واقع این متدها، متدهای abstract هستند.

 

استفاده از چند interface در یک subclass

می توانیم در یک کلاس از چند interface خودمان implements کنیم:

interface Car { 
    function go();
    function stop();
}
interface Home { 
    function setArea();
    function setRoom();
}
class Z4 implements Car, Home { 
    function go(){ /* -- */ }
    function stop(){ /* -- */ }
    function setArea(){ /* -- */ }
    function setRoom(){ /* -- */ }
}
class Lexus implements Car, Home { 
    function go(){ /* -- */ }
    function stop(){ /* -- */ }
    function setArea(){ /* -- */ }
    function setRoom(){ /* -- */ }
}

 

تفاوت interface و abstract

interface ها شباهت بسیاری با کلاس های abstract دارند. در عین حال تفاوت های آن ها عبارتند از:

  1. interface نمی تواند property داشته باشد در حالی کلاس abstract می تواند داشته باشد.
  2. همه متدهای interface باید public باشند در حالی که متدهای کلاس abstract می توانند public یا protected باشند.

 

extend کردن و implement کردن همزمان

یک کلاس می تواند هم یک کلاس دیگر را extend کند و هم یک interface را implement کند:

class User {}
interface Base {}
class Product extends User implements Base {}

 

interface می تواند حاوی constant باشد

یک interface نمی تواند حاوی property باشد ولی می تواند constant داشته باشد:

interface Base {
    const URL = 'Biawp.ir';
}

 

extend کردن interface از interface دیگر

می توانیم یک interface را از یک interface دیگر extend کنیم:

interface Readable{
    public function read();
}

interface Document extends Readable{
    public function getContents();
}

 

 

 

دیدگاهتان را بنویسید