用父对象作为参数调用的php子类构造函数

时间:2014-11-06 19:03:49

标签: php wordpress constructor

我对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>
   }
}

2 个答案:

答案 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属性。