PHP 特征冲突(特征参数)


PHP Traits conflict (trait param)

我有三个特质。

特质ParamGroupIdSessionIdGroupIdSessionId的特征包括Param

GroupSession 类包括GroupIdSessionId的特征

<?php
trait Param
{
    private $params = [];
    public function setParams($params)
    {
        $this->params = $params;
    }
    public function getParam($param)
    {
        return isset($this->params[$param])
            ? $this->params[$param]
            : null;
    }
}
trait GroupId
{
    use Param;
    public function getGroupId()
    {
        return $this->getParam('group.id');
    }
}
trait SessionId
{
    use Param;
    public function getSessionId()
    {
        return $this->getParam('session.id');
    }
}
class GroupSession
{
    use GroupId {
        GroupId::setParams insteadOf SessionId;
        GroupId::getParam insteadOf SessionId;
    }
    use SessionId;
}
$t = new GroupSession();

当我尝试运行此代码时,出现错误:

GroupId and SessionId define the same property ($params) in the composition of GroupSession. However, the definition differs and is considered incompatible.

请告诉我如何解决这个问题?

谢谢!

解决方法命名冲突

trait A
{
    public function smallTalk()
    {
        echo "I am form trait A and method smallTalk";
        echo "<br>";
    }
    public function bigTalk()
    {
        echo "I am form trait A and method bigTalk";
        echo "<br>";
    }
}

trait B
{
    public function smallTalk()
    {
        echo "I am form trait B and method smallTalk";
        echo "<br>";
    }
    public function bigTalk()
    {
        echo "I am form trait B and method bigTalk";
        echo "<br>";
    }
}
class AB
{
    use A, B {
    A::bigTalk insteadof B;
    B::bigTalk as gazi;
    B::smallTalk insteadof A;
    A::smallTalk as anis;
    }
}
$obj1 = new AB;
$obj1->bigTalk();
$obj1->gazi();
$obj1->smallTalk();
$obj1->anis();