PHP Trait调用继承函数

时间:2012-12-11 22:31:08

标签: php inheritance traits

我有一个特质

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!';

}

做了这个伎俩。

2 个答案:

答案 0 :(得分:11)

您可以这样做:

class Bar{

    use Foo {
        Foo::foo as foofoo;
    }

    private static function foo(){

        self::foofoo();

        echo ' World!';

    }

}

答案 1 :(得分:0)

你是否可以将你的特质方法foo重命名为fooo?

如果是,请在遵循静态调用语法(通过向特征函数定义添加静态关键字)之前,在类方法体中用Foo:fooo()替换Foo :: foo()

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