2016-10-21 4 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); 
    } 
} 

(あなたは1つの名前空間に同じ名前を持つ特性とクラスを持つことはできませんので、私はDにクラスの名前を変更しました。)

+0

正直、それはちょうどタイプミスでした –

+1

@JohnSmithこの回答は技術的に正しいものですが、あなたがやりたいことをやり遂げることができますが、基本的な前提がどれほど良いアイデアであるかはわかりません。あなたは本当に多くの魔法を持っている必要がありますか?これは、コードの基本ロジックを把握することを非常に困難にします。そのようなことが、多くのバグの直接的な原因になる可能性が最も高くなります。 – ChristianF

関連する問題