В трейтах можно некоторые методы объявлять абстрактными. В этом случае класс, использующий этот трейт, обязан будет реализовать такой метод. При этом абстрактные методы трейта не могут быть приватными.
Давайте посмотрим на примере. Пусть у нас есть вот такой трейт:
<?php
trait TestTrait
{
public function method1()
{
return 1;
}
abstract public function method2();
}
?>
Пусть наш трейт используется классом Test
.
Наличие в трейте абстрактного метода обяжет
программиста реализовать его в классе, иначе
будет ошибка PHP.
Давайте сделаем класс Test
месте с
методом method2
:
<?php
class Test
{
use TestTrait; // используем трейт
// Реализуем абстрактный метод:
public function method2()
{
return 2;
}
}
new Test;
?>
Скопируйте код моего трейта TestTrait
и код моего класса Test
. Удалите из
класса метод method2
. Убедитесь в
том, что отсутствие его реализации приведет
к ошибке PHP.