使用受保护的方法注入类实例

时间:2018-08-16 10:12:41

标签: php class methods protected

我有两个类:“用户”和“房间”。 类“ Room”经常使用类“ User”,因此当我声明类“ Room”时,我将类“ User”实例作为其参数之一。

问题在于“用户”类的属性/方法受到保护,因此“房间”不能使用注入的“用户”实例。

然后,我必须将“ Room”类扩展为“ User”类,以便它可以访问受保护的内容。

由于“房间”将继承“用户”中的所有内容,而这些内容将永远不会使用,因此逻辑上说这种做法是错误的吗?还有其他方法吗?

2 个答案:

答案 0 :(得分:0)

您真的不应该使“房间”扩展为“用户”。尽管这可能会起作用,但它会破坏SOLID principles的第三条规则,这基本上意味着子类应主要表现得像父类一样。

那么您可以做什么:

  1. 如果您有权访问类本身(例如,它不像库那样属于第三方代码的一部分),则可以对其进行修改并编写getter并更改方法的可见性。如果这是您的代码,这是完全合法的。依赖关系随时间而变化,因此有时有必要这样做。

  2. 使用您自己的User类扩展“ User”,并将吸气剂放入其中或覆盖方法。当然,在“房间”中,您必须使用新的User类。

答案 1 :(得分:0)

将公共方法添加到User类,该类可以由Room类使用,并使用所有允许的公共方法创建Class Interface。公共方法应该调用私有方法,而不是直接从父类中调用私有方法。