#php #traits
#php #Трейты
Вопрос:
trait A
{
function __get($name)
{
}
}
trait B
{
function __get($name)
{
}
}
trait C
{
function __get($name)
{
}
}
class D
{
use A, B, C;
function __get($name)
{
// it may also have magic method
}
}
Я хочу вызвать все 4 __get()
метода, это выполнимо? Я вижу, что могу переименовывать методы, но это скорее выбор метода из A, B, C, но мне нужны все из них
Ответ №1:
Невозможно без переименования импортированных __get
методов.
Смотрите документы PHP по этому вопросу: PHP: Черты — разрешение конфликтов
class D
{
use A, B, C {
A::__get as private __getA;
B::__get as private __getB;
C::__get as private __getC;
}
function __get($name)
{
$this->__getA($name);
$this->__getB($name);
$this->__getC($name);
}
}
(Я переименовал класс в D, поскольку у вас не может быть признака и класса с одинаковым именем в одном пространстве имен.)
Комментарии:
1. @JohnSmith Хотя этот ответ технически верен и позволит вам делать то, что вы хотите, я не совсем уверен в том, насколько хороша идея, лежащая в основе. Вам действительно нужно иметь так много магических методов, распределенных по стольким классам? Это значительно усложнит понимание базовой логики вашего кода и, скорее всего, станет прямой причиной множества ошибок.