10

私は特徴を持っています

trait Foo{

    protected static function foo(){
        echo 'Hello';
    }
}

とクラス

class Bar{
    use Foo;

    private static function foo(){
        Foo::foo();

        echo ' World!';
    }
}

使用できませんFoo:foo()。目的の効果を達成するにはどうすればよいですか?

編集

使用する

use Foo {foo as parentFoo}

private static function foo(){

    self::parentFoo();

    echo ' World!';

}

トリックをしました。

4

2 に答える 2

11

あなたはこのようなことをすることができます:

class Bar{

    use Foo {
        Foo::foo as foofoo;
    }

    private static function foo(){

        self::foofoo();

        echo ' World!';

    }

}
于 2012-12-11T22:49:06.607 に答える
0

特性メソッドfooの名前をfoooに変更することはできますか?

はいの場合は、静的呼び出し構文に従う前に、クラスメソッド本体でFoo :: foo()をFoo:fooo()に置き換えてください(特性関数定義に静的キーワードを追加することにより)

<?php

trait Foo 
{
    protected static function Fooo()
    {
        echo 'Hello';
    }
}

class Bar 
{
    use Foo;

    private static function foo() 
    {
        self::fooo();

        echo ' World!';
    }

    public static function expose() 
    {
        echo self::foo();
    }
}

echo Bar::expose();

編集:

明らかに、私の質問に対する答えは「いいえ、特性メソッドの名前を変更することは許可されていません」でした。その場合、PHPに埋め込まれたネイティブの競合解決に関連する解決策を指摘しました:http: //php.net /manual/en/language.oop5.traits.php#language.oop5.traits.conflict

于 2012-12-11T22:48:39.737 に答える