我对PHP语法不是很好,所以这是我的问题:
我有一堂课。
Class Bar扩展了Foo。
我想为使用类Foo的实例作为参数调用的Bar创建一个构造函数,并创建一个看起来就像类Foo的实例的Bar实例。
似乎我必须这样做,因为Foo是WordPress插件中的一个类。我正在编写一个插件来处理原始插件,在我可以添加的过滤器中,我得到了Foo对象。
我愿意以“正确”的方式做到这一点,如果我能学会“正确”的方式去做。
这样:
class Foo { // in the original plugin
public function __construct() {
<do some stuff>
}
}
class Bar extends Foo { // in my plugin to extend the original plugin
public function __construct($myFooObject) {
<I want: $this = $myFooObject; but it doesnt work>
<do some stuff special to Bar>
}
}
答案 0 :(得分:1)
好。您已经继承了Foo类的功能和成员。你在这里错过的是调用父类的构造函数(Foo的构造函数)。
将以下行添加到条形码__construct()
:
parent::__constrcut();
Bar现在看起来像这样:
class Bar extends Foo { // in my plugin to extend the original plugin
public function __construct($myFooObject) {
parent::__construct(); // we've added this line to call the parent constructor
<do some stuff special to Bar>
}
}
在子类构造函数中调用父构造函数可以保持对象的完整性,还允许子类具有对其父级的动态访问。
答案 1 :(得分:0)
<?php
class Bar extends Foo { // in my plugin to extend the original plugin
public function __construct($myFooObject) {
foreach (get_object_vars($myFooObject) as $key=>$value){
$this->$key = $value;
}
// <I want: $this = $myFooObject; but it doesnt work>
// <do some stuff special to Bar>
}
}
这不仅会使用Foo
属性进行实例化,还会在创建时复制$myFooObject
属性。