اینترفیس ها (Interfaces)
اینترفیس (Interface) یعنی فهرست وظایف. اینترفیس فقط می گوید چه متدهایی باید باشند. سپس هر کلاس، روش خودش را پیاده می کند. با اینترفیس در PHP، کدها یکدست می شوند. تمرکز ما «اینترفیس در PHP» است.
تعریف اینترفیس در PHP
با کلمه interface یک قرارداد می سازیم. متدها فقط امضا دارند، بدن ندارند.
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function someMethod3() : string;
}
?>
نکته: امضا یعنی نام متد، ورودی ها، و نوع خروجی.
اینترفیس ها در برابر کلاس انتزاعی
هر دو قرارداد می دهند؛ اما تفاوت ها مهم اند.
- اینترفیس ویژگی ندارد؛ کلاس انتزاعی می تواند داشته باشد.
- همه متدهای اینترفیس عمومی هستند.
- متدهای اینترفیس انتزاعی اند؛ پیاده سازی ندارند.
- کلاس می تواند از یک کلاس ارث ببرد و اینترفیس پیاده کند.
استفاده از اینترفیس در عمل
برای پیاده سازی اینترفیس از implements استفاده کن. کلاس باید همه متدها را پیاده کند.
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
چند کلاس، یک قرارداد واحد
اینترفیس اجازه می دهد چند کلاس، یک API بدهند. این یعنی چندریختی (Polymorphism).
<?php
// Interface definition
interface Animal {
public function makeSound();
}
// Class definitions
class Cat implements Animal {
public function makeSound() {
echo " Meow ";
}
}
class Dog implements Animal {
public function makeSound() {
echo " Bark ";
}
}
class Mouse implements Animal {
public function makeSound() {
echo " Squeak ";
}
}
// Create a list of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);
// Tell the animals to make a sound
foreach ($animals as $animal) {
$animal->makeSound();
}
?>
نکته: «اینترفیس در PHP» وابستگی ها را کم می کند و تست پذیری را بالا می برد.
گام های عملی
- یک اینترفیس با دو متد بساز.
- دو کلاس بده و هر دو متد را کامل کن.
- لیستی از اشیا بساز و متد مشترک را صدا بزن.
برای ادامه، کلاس های انتزاعی را ببین. همچنین صفحه وراثت و تریت ها کنار «اینترفیس در PHP» مفیدند.
جمع بندی سریع
- اینترفیس فقط قرارداد متدهاست.
- همه متدها عمومی اند.
- هیچ بدنی در اینترفیس نیست.
- کلاس ها باید همه متدها را بسازند.