Интерфейсы и трейты в PHP
Интерфейсы в ООП PHP
Интерфейсы (interface) - это класс, в котором все методы являются абстрактными (abstract) и открытыми (public). В интерфейсе ООП PHP можно задать только имена методов и их параметры, а реализованы они обязаны быть в расширяемых ими классах.
Для реализации интерфейса мы используем ключевое слово implements. Класс может реализовать более одного интерфейса, которые разделяются запятыми. Как и классы, интерфейс может содержать константы, которые запрещено переопределять.
Трейты в ООП PHP
Трейты (trait) - это механизм обеспечения повторного использования кода в PHP с учетом одиночного наследования. Трейт отчасти реализует множественное наследование, позволяя разработчику повторно использовать наборы методов свободно, в нескольких независимых классах.
Трейт похож на класс, но создать экземпляр трейта невозможно. Он предназначен для группирования функционала, который потом используется в разных классах с помощью директивы use. Нужные для использования в классе трейты можно указать через запятую.
Код примера:
<?php //Интерфейсф декларируют Методы, которые должны быть реализованы interface NameA { const CON=5*10;//50 public function getA(); public function setA($a); } interface NameB { public function getB(); public function setB($b); } //Объединяем NameA и NameB в Name interface Name extends NameA, NameB {} //Трейт - похож на класс trait My1 { public function summa($a,$b):float{ return $a+$b; } } trait My2 { public function multi($a,$b):float{ return $a*$b; } } //class Gena implements NameA, NameB class Gena implements Name { use My1, My2;//Подключаем Трейты (множественное наследование) private $a=1; private $b=2; public function getA(){ return $this->a; } public function getB(){ return $this->b; } public function setA($a){ $this->a=$a; } public function setB($b){ $this->b=$b; } } $objG=new Gena; //Содаём обект класса Gena $objG->setA(10); //Меняем значение $a $objG->setB(20); //Меняем значение $b echo $objG->getA()."<br>\n"; //10 - новое значение echo $objG->getB()."<br>\n"; //20 - новое значение echo $objG->summa(30,40)."<br>\n";//70 (30+40) echo $objG->multi(30,40)."<br>\n";//1200 (30*40) echo Gena::CON."<br>\n"; //50 - константа ?>