我刚刚发现,特征中的私有属性不是特征的私有属性,而是使用该特征的类的私有属性。
这意味着,如果您有两个定义相同私有属性的特征,则会收到警告消息:
trait DataOne {
private $_data;
}
trait DataTwo {
private $_data;
}
class SomeClass {
use DataOne;
use DataTwo;
}
PHP给您以下警告消息:
DataOne and DataTwo define the same property ($_data) in the
composition of SomeClass. This might be incompatible, to improve
maintainability consider using accessor methods in traits
instead. Class was composed in SomeClass.
我有一个具有多个特征的图书馆,并且将每个私有财产重命名为独特的做法是不切实际的。我可以使用什么机制来定义属性或变量,使其对特征中的所有方法均可见,而对使用该特征的类不可见?
答案 0 :(得分:-1)
您无法将特质作为一个类,不是。
实际上,特征只是您在使用它的类上粘贴的一段代码,因此它不尊重方法和属性的可见性。
也许您需要重新考虑您的类结构以适应您的需求。