我一直收到一个php错误,指出该方法不在当前类中或存在冲突。见错误:
trait A // namespace Src\Traits;
{
function callMe()
{}
}
trait B // namespace Src\PowerTraits;
{
function callMe()
{}
}
class A // Namespace Src\Classes;
{
use \Src\Traits\A;
use \Src\PowerTraits\B {
A::callMe insteadof B::callMe;
}
}
我试过但我找不到解决方案。这就是我想要实现的目标:
A::callMe insteadof callMe;
当我尝试
时Could not find trait Src\Classes\callMe
我得到以下错误(理解,它显然在错误的命名空间中):
\Src\Traits\A::callMe insteadof \Src\Traits\B::callMe (error, syntax error);
\Src\Traits\A::callMe insteadof B::callMe (error: wrong namespace);
\Src\Traits\A::callMe as NewA (error, collision warning);
\Src\Traits\A::callMe as \Src\Traits\A::NewA (error, syntax error);
也尝试过:
Trait method callMe has not been applied, because there are collisions with other trait methods
单独留下,给出碰撞警告:
JSON.parse()
当traits和调用类都在不同的命名空间中时,如何覆盖trait方法?
答案 0 :(得分:1)
关于A::callMe insteadof B::callMe
::
时,无法使用范围解析运算符insteadof
(Paamayim Nekudotayim)命名方法,因为PHP将查找同名的方法。 A::callMe insteadof B;
\Src\Traits\A::callMe insteadof \Src\PowerTraits\B;
的完全限定类<?php
namespace Src\Traits
{
trait A
{
function callMe()
{
echo 'Trait A';
}
}
}
namespace Src\PowerTraits
{
trait B
{
function callMe()
{
echo 'PowerTrait B';
}
}
}
namespace Src\Classes
{
class A
{
use \Src\Traits\A;
use \Src\PowerTraits\B {
\Src\Traits\A::callMe insteadof \Src\PowerTraits\B;
}
}
}
namespace
{
(new \Src\Classes\A)->callMe();
}
特质A