PHP:类的特征和其他特征冲突

我的PHP特性有问题.
我想在一个类中以及在该类中使用的一个特征中使用一个特征.

例:

trait Loggable {
  protected function log(msg) { 
    echo msg; 
  }
}

trait SomeOtherTrait {
  use Loggable;
}

class MyClass {
  use SomeOtherTrait, Loggable;
}

但这会导致冲突,因为Loggable在类中使用了两次(一次在类中,通过其他特征一次),但是我不明白这个问题,因为封装功能就是所有特征的全部,对不对?
所以我只想在包含Loggable特征的任何地方使用log方法…

所以问题是:为什么会发生碰撞?两者(特征和类)都指向相同的特性和方法,因此不应有冲突.

解决方法:

SomeOtherTrait使用Loggable特性,因此您可以访问Loggable的所有受保护成员和公共成员,并且对使用SomeOtherTrait的所有类也是如此.在这里,您可以访问Loggable和SomeOtherTrait的所有公共成员和受保护成员.

trait Loggable {
   protected function log($msg) { 
      echo $msg; 
   }
}

trait SomeOtherTrait {
   use Loggable;
}

class MyClass {
   use SomeOtherTrait;

   public function test() 
   { 
       $this->log("test");
   }
}

$myClass = new MyClass();

$myClass->test();
上一篇:PHP特性:如何解决属性名称冲突?


下一篇:如何从C模板中的方法类型推导出类类型?