2016-10-21 3 views
0
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, но мне все они нужныPhp, цепные вызовы (магические) методы в чертах, как?

ответ

1

Невозможно без переименования импортированных методов __get.

См PHP документы по этому вопросу: PHP: Traits - Conflict Resolution

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, так как вы не можете иметь черты и класс с тем же именем в одном пространстве имен)

+0

да, это была просто опечатка –

+1

@JohnSmith Хотя этот ответ технически корректен и позволит вам делать то, что вы хотите сделать, я не совсем уверен, насколько хороша идея базового помещения. Вам действительно нужно, чтобы у вас было много магических методов, распределенных по стольким классам? Это сделает основную логику вашего кода намного сложнее понять, и как таковая, скорее всего, станет прямой причиной множества ошибок. – ChristianF

Смежные вопросы