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::foo() (通过在特征函数定义中添加 static 关键字)

<?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 回答