4

これはクラスがそれを行う方法ですか?

Class Main 
{
    $this->a = new A();
    $this->b = new B();
    $this->c = new C();

    $this->b->doTranslate($this->a->saySomething());
}

そして、これは特性がそれを行う方法ですよね?

Class Main {
    use A;
    use B;
    use C;

    $this->doTranslate($this->saySomething());
}

トレイトについてはまったく詳しくありませんが、新しい PHP 5.4 のトレイトの例を見ると、1 つのケースでしか役に立たないようです。A class only be extended once to use $this together, but we can use multiple traits.

質問 1:基本クラスよりもトレイトを使用する利点はそれだけですか?

質問 2:trait A, B, and Cすべてに という名前の関数がある場合、どのトレイトが使用されるかを PHP がどのように決定するかexample()を試してみると? $this->example();何が起こるだろう?

さらに、テキストの壁を書く代わりに。短いコード例と短い概要を提示して、見て理解できるようにしてください。私は特性に精通しておらず、それらが実際に何であるかを知りません。

4

2 に答える 2

5

あなたは特性で多くのことをすることができます。フレームワークで、たとえばシングルトンやゲッター/セッターとして使用しました。

trait Singleton
{
    protected static $_instance;

    protected function __construct(){}

    public static function getInstance()
    {
        if (null === self::$_instance) {
            self::$_instance = new static();
        }
        return self::$_instance;
    }
}

もう1つの興味深い使用法は、アスペクト指向プログラミングです。答えは説明するのに長いことでしょう。ここここを見てください。

質問2:特性が同じ方法である場合、致命的なエラーが発生します。insteadof競合を解決するには、演算子を使用する必要があります。ここを見てください

于 2013-03-01T18:56:50.043 に答える