代码之家  ›  专栏  ›  技术社区  ›  Jay Bienvenu

使属性对特征私有

php
  •  0
  • Jay Bienvenu  · 技术社区  · 7 年前

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

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

    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 回复  |  直到 7 年前
        1
  •  -1
  •   Elias Soares    7 年前

    你不能把一种特质看作是一门课,事实并非如此。

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

    也许你需要重新考虑一下你的班级结构以适应你的需要。

    推荐文章