我的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();