我有以下课程。
问题是$ _instance正在AuthFactory和UserFactory之间共享。
class Factory {
protected static $_instance;
/*...*/
}
class AuthFactory extends Factory {
protected static $_instance;
/*...*/
}
class UserFactory extends Factory {
protected static $_instance;
/*...*/
}
如何避免AuthFactory :: $ _实例中的对象与UserFactory :: $ _ instance是同一个对象?
这样做的全部原因是我可以在Factory中设置结构,并为每个我想要使用的实际工厂扩展。
答案 0 :(得分:1)
我的经验如下:
如果声明一个静态属性,那么它的值将在它定义的类和所有子类之间共享。
例外情况是您重新声明子类中的相同属性。在这种情况下,每个子类都有自己的值。这意味着您需要记住重新声明该属性。
但是,由于与后期静态绑定相关的问题,如果使用self :: $ variable来访问该属性,那么该值将从超类中获取(如果访问方法是在超类中定义的。我是不确定如果在子类中定义了访问方法会发生什么。
如果你使用static :: $ variable,那么这应该不是问题,但我没有在所有条件下进行过广泛的测试。
您是否正在使用self :: $ _ instance或static :: $ _ instance来访问相关属性?如果是前者,那么尝试改为后者。
我怀疑,但是根据它的用途,将属性设置为非静态可能更好。