Интерфейсы и трейты в 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 - константа
?>


