PHP:使特性对特性​​具有私有性

时间:2018-08-22 16:48:41

标签: php

我刚刚发现,特征中的私有属性不是特征的私有属性,而是使用该特征的类的私有属性。

这意味着,如果您有两个定义相同私有属性的特征,则会收到警告消息:

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.

我有一个具有多个特征的图书馆,并且将每个私有财产重命名为独特的做法是不切实际的。我可以使用什么机制来定义属性或变量,使其对特征中的所有方法均可见,而对使用该特征的类不可见?

1 个答案:

答案 0 :(得分:-1)

您无法将特质作为一个类,不是。

实际上,特征只是您在使用它的类上粘贴的一段代码,因此它不尊重方法和属性的可见性。

也许您需要重新考虑您的类结构以适应您的需求。