PHP Codeigniter - parent::__construct [英] PHP Codeigniter - parent::__construct

查看:28
本文介绍了PHP Codeigniter - parent::__construct的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当从 PHP 中的父类继承时,尤其是在 Codeigniter 中,parent::__construct 或 parent::model() 会做什么?

When getting inherited from a parent class in PHP, especially in Codeigniter what does parent::__construct or parent::model() do?

如果我没有 __construct 父类,会有什么不同?而且,建议采用哪种方式?

How would it make difference if I don't __construct parent class? And, which way is suggested?

-添加-

重点更多地放在 Codeigniter 上,具体取决于版本以不同方式调用 parent::__construct 以及是否可以省略,以防 Codeigniter 自动执行此操作.

The focus is more on Codeigniter specific regarding a call to parent::__construct in different ways depending on versions and also if this could be omitted in case Codeigniter would do this automatically.

推荐答案

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

This is a normal class constructor. Let's look at the following example:

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 的构造函数.

As you see, class B inherits all values and functions from A. So the class member $some_var is accessible from A as well as from B. Because we've added a constructor in class B, the constructor of class A will NOT be used when you are creating a new object of class B.

现在看下面的例子:

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

如你所见,因为我们没有声明构造函数,所以隐式使用了类A的构造函数.但是我们也可以做下面的,相当于C类:

As you can see, because we have not declared a constructor, the constructor of class A is used implicitly. But we can also do the following, which is equivalent to class 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(); 行.给出的例子:

So you only have to use the line parent::__construct(); when you want a constructor in the child class to do something, AND execute the parent constructor. Example given:

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

More information can be found here: http://php.net/manual/en/language.oop5.php

这篇关于PHP Codeigniter - parent::__construct的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆