【发布时间】:2015-09-12 18:36:07
【问题描述】:
我有一个必须使用其他多个对象实例化的 A 类
class A{
function __construct(new X(), new Y(), new Z()){
$this->foo = 'foo';
}
}
为了省去我这个类实例化的麻烦,我为这个类建立了一个工厂。
class A_Factory{
public static function create_A(){
return new A(new X(), new Y(), new Z());
}
}
我有一个扩展类 A 的 B 类。我的问题是我不知道如何在 B 类中实例化 A 类以访问属性“foo”。
对我来说尝试是很自然的:
class B extends A{
function __construct(){
A_Factory::create_A();
}
}
但在尝试访问对象 A 属性时会产生通知错误:
Undefined property: A::$foo
如何使用 A 类工厂在其子类中轻松实例化 A?谢谢。
【问题讨论】:
-
父::__construct ?
-
工厂的重点是不要在A的实例化中使用construct以及所需对象的列表
-
你确定这是一个好的设计吗?
-
如果类是继承的,我不明白为什么要创建实例
-
如果
B扩展A,它继承foo,所以只需使用$this->foo。除非foo只设置在A的构造函数中,你在B中重载,在这种情况下你需要先调用parent::__construct()。