رابط ها اين امكان را ميدهند، كه مشخص كنيديك كلاس بايد چه متدهائي از رابط را پيدا سازي كند رابط ها استفاده از انواع كلاسهاي مختلف را به روش مشابه،آسان ميكنند.هنگاميكه يك يا چند كلاس از يك رابط استفاده ميكنند به آن چند شكلي(polymorphism) ميگويند.
رابط ها با كلمه كليديinterface تعريف ميشوند .فرم كلي تعريف مطابق زير است .
<?php interface InterfaceName { public function someMethod1(); public function someMethod2($name, $color); public function someMethod3() : string; } ?>
يك رابطه با تفاوتهائي، مشابه يك كلاس انتزاعي است .تفاوت آنان مطابق زيراست:
1ـ رابط نميتواند داراي ويژگي باشد، در صورتيكه كلاس انتزاعي ميتواند داراي ويژگي باشد.
2ـ متد رابط بايد بصورتpublic باشد، در صورتيكه از انتزاعي ميتواندpublic يا protected باشد.
3ـ متدها در رابط همه انتزاعي(abstract) هستند ونميتوانند پياده سازي شوند.در آنها نياز به ذكر كلمه كليديabstract نمي باشد.
4ـ كلاسها ميتوانند رابط ها را پياده سازي كنند، در ضمن اينكه همزمان وارث كلاس ديگريند.
براي پياده سازي يك رابط دريك كلاس از كلمه كليديimplement استفاده ميشود . كلاسي كه ميخواهد از رابط استفاده نمايد، بايد تمام متدهاي رابط را پياده سازي نمايد.
مثال-
<?php interface Animal { public function makeSound(); } class Cat implements Animal { public function makeSound() { echo "Meow"; } } $animal = new Cat(); $animal->makeSound(); ?>
باتوجه بمثال بالا، فرض كنيد كه ميخواهيم نرم افزاري بنويسيم كه گروهي از حيوانات را مديريت كند .اعمالي وجود داردكه همه حيوانات مي توانند انجام دهند، اماهر حيواني آنرا بروش خود انجام ميدهد.
با استفاده از رابط ها، مي توانيم كدي بنويسيم كه ميتواند براي همه حيوانات كار كند، حتي اگر هر حيوان متفاوت رفتار كند.
مثال ـ مثال زير در مورد نوع صداي حيوانات
<?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(); } ?>
مثال ـ در مثال زير براي هركدام از اشياء تعريف شده در مثال بالا يك ويژگيname تعريف ومقدار دهي شده است، از آن براي نمايش بهتر نوع صداي حيوان ، نام حيوان هم مشخص شده است.
<?php // Interface definition interface Animal { public function makeSound(); } // Class definitions class Cat implements Animal { public function makeSound() { echo "<br>".$this->name."= Meow "; } } class Dog implements Animal { public function makeSound() { echo "<br>".$this->name."= Bark "; } } class Mouse implements Animal { public function makeSound() { echo "<br>".$this->name."= Squeak "; } } // Create a list of animals $cat = new Cat(); $cat->name="cat"; $dog = new Dog(); $dog->name="dog"; $mouse = new Mouse(); $mouse->name="mouse"; $animals = array($cat, $dog, $mouse); // Tell the animals to make a sound foreach($animals as $animal) { $animal->makeSound(); } ?>