PHP Codeigniter - parent :: __ construct

时间:2013-07-23 11:54:58

标签: php codeigniter

从PHP中的父类继承时,特别是在Codeigniter中parent::__construct or parent::model()做了什么?

如果我没有__construct家长班,会有什么不同? 并且,建议采用哪种方式?

- 增加 -

重点更多地放在Codeigniter上,具体取决于版本对parent::__construct的调用方式有所不同,如果Codeigniter会自动执行此操作,也可以省略。

3 个答案:

答案 0 :(得分:71)

这是一个普通的类构造函数。我们来看下面的例子:

class A {
    protected $some_var;

    function __construct() {
        $this->some_var = 'value added in class A';
    }

    function echo_some_var() {
        echo $this->some_var;
    }
}

class B extends A {
    function __construct() {
        $this->some_var = 'value added in class B';
    }
}

$a = new A;
$a->echo_some_var(); // will print out 'value added in class A'
$b = new B;
$b->echo_some_var(); // will print out 'value added in class B'

如你所见,B类继承了A中的所有值和函数。所以类成员$some_var可以从A和B中访问。因为我们在B类中添加了一个构造函数,构造函数是在创建B类的新对象时,不会使用A类。

现在看下面的例子:

class C extends A {
    // empty
}
$c = new C;
$c->echo_some_var(); // will print out 'value added in class A'

如您所见,因为我们尚未声明构造函数,所以隐式使用类A的构造函数。但是我们也可以做以下,相当于C类:

class D extends A {
    function __construct() {
        parent::__construct();
    }
}
$d = new D;
$d->echo_some_var(); // will print out 'value added in class A'

因此,当您希望子类中的构造函数执行某些操作时,您只需使用行parent::__construct();,并执行父构造函数。给出的例子:

class E extends A {
    private $some_other_var;

    function __construct() {
        // first do something important
        $this->some_other_var = 'some other value';

        // then execute the parent constructor anyway
        parent::__construct();
    }
}

可在此处找到更多信息:http://php.net/manual/en/language.oop5.php

答案 1 :(得分:2)

  

parent :: __ construct或parent :: model()做什么?

这些函数完全相同,只有构造函数用于命名之后 类本身在PHP5之前。我在你的例子中说你正在扩展Model类(以及一些旧版本的CI,因为你不需要使用CI_model),如果我在这个__construct中是正确的,那么与model()相同。

答案 2 :(得分:0)

它将仅执行父类的构造函数