PHP超类和子类

时间:2012-02-24 09:08:43

标签: php inheritance

一个简单的问题,以下是否有意义?

B类扩展了A类

A类构造函数:

function __construct(){
    //do something
}

B类构造函数:

function __construct(){
    parent::__construct();
}

在这种情况下,完全实现子构造函数有什么显着优势吗?

我只能想到:

  • B类的整个代码在结构
  • 中会更“完整”

知道在编码或结构化等方面是否有任何显着优势会很有趣。

3 个答案:

答案 0 :(得分:4)

您希望在子类(子类)中调用父构造函数的唯一时间是在构造函数中添加自定义代码。

在您的示例中,您可以在B类中完全省略__construct()方法。

但是你可能想要这样做:

class A {

  function __construct() {
    run_a_function();
    $this->set = "a variable";
  }

}

class B {

  function __construct() {
    run_a_function_specific_to_class_b();
    $this->set = "a variable specific to class b";

    // now call the parent constructor
    parent::__construct();
  }

}

答案 1 :(得分:0)

没有。如果所有构造函数(或任何方法)都调用同名的parent方法,则没有任何优势。更多代码。

答案 2 :(得分:0)

本地构造函数会覆盖其父级:

<?php
class Blog extends CI_Controller {

       public function __construct()
       {
            parent::__construct();
            // Your own constructor code
       }
}
?>

如果子类中有__construct()方法,则必须显式调用父构造函数。

如果您不想在子构造函数中运行任何内容,请不要在子项中指定构造函数方法,并且将自动调用父项构造函数。