Interface ها در php شبیه کلاس های abstract (انتزاعی) هستند که شامل متدهای abstract
است که برنامه نویس هنگام ارث بری از آن استفاده می کند.
در کار تیمی استفاده از اینترفیس ها بسیار کاربردی است و این اطمینان خاطر را میدهد که همه برنامه نویس های تیم از متدهایی که تعریف شدند استفاده کند و کدهای آن را بنویسد.
چطور یک interface را پیاده سازی کنیم؟
اینترفیس ها را با کلمه کلیدی interface تعریف و کلاس ها نیز می توانند با کلیدواژه implements
بعد از اسم کلاس از آن بهره ببرند.
1 2 3 4 5 6 7 |
interface interfaceName { // abstract methods } class Child implements interfaceName { // defines the interface methods and may have its own code } |
در مثال ساده زیر یک اینترفیس برای کلاس هایی که ماشین ها (car) را هندل می کنند ساختیم و به اینصورت تمام فرزندان کلاس متعهد به استفاده از متدهای setModel()
و getModel()
هستند.
1 2 3 4 5 |
interface Car { public function setModel($name); public function getModel(); } |
اینترفیس ها مثل کلاس های abstract
شامل ثابت و متدهای انتزاعی هستند ولی بر خلاف آن فقط می توان متدهای پابلیک داشت و نمی تواند از متغییر ها استفاده کرد.
کلاس های که از اینترفیس استفاده یا به اصطلاح implement می کنند باید تمامی متدهای اینترفیس را همراه پارامترهای آن تعریف کنند. برای همین در کلاس miniCar
خود, تمامی متدهای abstract را اضافه کردیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class miniCar implements Car { private $model; public function setModel($name) { $this -> model = $name; } public function getModel() { return $this -> model; } } |
می توان از چند اینترفیس همزمان استفاده کرد؟
بله می توانیم به مثال زیر دقت کنید
یک اینترفیس Vehicle
با دو متد ساختیم.
1 2 3 4 5 |
interface Vehicle { public function setHasWheels($bool); public function getHasWheels(); } |
حالا در کلاس فرزند دو اینترفیس را استفاده می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class miniCar implements Car, Vehicle { private $model; private $hasWheels; public function setModel($name) { $this -> model = $name; } public function getModel() { return $this -> model; } public function setHasWheels($bool) { $this -> hasWheels = $bool; } public function getHasWheels() { return ($this -> hasWheels)? "has wheels" : "no wheels"; } } |
تفاوت بین کلاس های abstract و interface چیست؟
دیدیم که کلاس های abstract و اینترفیس ها در پیاده سازی متدها داخل کلاس فرزند مشابه هستند ولی با این حال تفاوت هایی دارند:
Interface ها می توانند شامل متدها و ثابت های abstract باشند ولی نمی توانند متد و متغیرهای معمولی داشته باشند.
همه متدهای داخل اینترفیس باید بصورت public
تعریف شوند.
یک کلاس می تواند چندین اینترفیس را استفاده کند درحالی که همزمان فقط می توان از یک کلاس abstract استفاده کرد.
جمع بندی
در این بخش از سری آموزش شی گرایی در PHP با نحوه استفاده interface آشنا شدیم و تفاوت آن با کلاس های abstract را یاد گرفتید.
در آموزش بعدی مفهوم و استاندارد چندریختی (polymorphism) را با مثال یاد می گیرید