我有一个特质
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!';
}
做了这个伎俩。
答案 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