Методы черты действуют так, как они объявлены в классе с использованием черты, т.е.
trait MyTrait {
public function getName() : string
{
return parent::getName() . '_special';
}
}
class MyClass extends MyParentClass {
use MyTrait;
}
Функционально совпадает с
class MyClass extends MyParentClass {
public function getName() : string
{
return parent::getName() . '_special';
}
}
Должно быть понятно, что в этом случае parent
относится к MyParentClass
. Если есть какие-либо сомнения, используя следующий код:
<?php
trait MyTrait {
public function getName() : string
{
return parent::getName() . '_special';
}
}
class MyParentClass {
public function getName(): string
{
return "MyName";
}
}
class MyClass extends MyParentClass {
use MyTrait;
}
$instance = new MyClass();
echo $instance->getName();
Создает следующий вывод:
MyName_special
Это может быть дополнительно проверено / продемонстрировано с использованием return parent::class;
( ref ) в методе trait, который возвращает MyParentClass
.