Ich bekomme immer einen PHP-Fehler, der anzeigt, dass entweder die Methode nicht in der aktuellen Klasse ist oder es eine Kollision gibt. Siehe Fehler:Wie kann ich Trait-Methodenkollisionen mithilfe von Merkmalen und Klassen entfernen, die sich in verschiedenen Namespaces befinden?
Trait method callMe has not been applied, because there are collisions with other trait methods on Src\Classes\A in
C:\wamp\www\src\classes\a.php on line 72
Ich habe versucht, aber ich konnte keine Lösung finden. Das ist, was ich erreichen möchte:
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;
}
}
Wenn ich
A::callMe insteadof callMe;
ich versuchen, die folgende Fehlermeldung erhalten (verstanden, es ist offensichtlich in der falschen Namensraum):
Could not find trait Src\Classes\callMe
Auch versucht:
\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);
Linke allein, gibt die Kollisionswarnung:
Trait method callMe has not been applied, because there are collisions with other trait methods
Wie kann ein Merkmal Methode überschreiben, wenn die Züge und die anrufende Klasse alle in unterschiedlichen Namensräumen sind?