这是一些有效的代码:
class A {
public $Foo;
public function GetFoo() {
$this->Foo = 'Bar';
}
}
class B extends A {
function __construct() {
$this->GetFoo();
echo $this->Foo;
}
}
$b = new B(); // Outputs "Bar"
有什么方法可以让这个“更漂亮”(即没有A :: GetFoo()方法)?我会认为将$ this-> Foo的填充包含在A :: __ construct()中会起作用,但事实并非如此。
只是为了把它包起来,这就是我想要的:类A实例化我的DB对象,并且该对象可用于A的每个子类。
答案 0 :(得分:2)
也许你在没有从B
打电话的情况下覆盖了父母的构造函数?
class A {
protected $Foo = null;
public function __construct() {
$this->Foo = 'Bar';
}
}
class B extends A {
public function __construct() {
parent::__construct();
echo $this->Foo;
}
}
答案 1 :(得分:1)
来自PHP manual:
“必须将类属性定义为 公共,私人或受保护的。如果 声明使用var而没有显式 可见性关键字,属性将 被定义为为公共。“
因此,您的班级B
可以看到$this->Foo
。您不必先调用GetFoo()
。但是,如果需要在类$this->Foo
的构造函数内引用B
,则必须首先调用父构造函数。