首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP parent::__construct

PHP parent::__construct
EN

Stack Overflow用户
提问于 2013-07-23 11:54:57
回答 3查看 110.9K关注 0票数 22

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

如果我没有__construct父类,这又有什么区别呢?那么,建议用哪种方式呢?

-Added

重点是Codeigniter特定于以不同方式调用parent::__construct的方式,取决于不同的版本,如果Codeigniter会自动这样做,也可以省略这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-23 12:04:44

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

代码语言:javascript
复制
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的构造函数不会被使用。

现在看下面的例子:

代码语言:javascript
复制
class C extends A {
    // empty
}
$c = new C;
$c->echo_some_var(); // will print out 'value added in class A'

正如您所看到的,因为我们没有声明构造函数,所以隐式地使用了类A的构造函数。但是我们也可以这样做,这相当于C类:

代码语言:javascript
复制
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();。举例:

代码语言:javascript
复制
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

票数 88
EN

Stack Overflow用户

发布于 2014-02-17 13:27:00

parent::__construct或父级::model()做什么?

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

票数 2
EN

Stack Overflow用户

发布于 2019-07-18 04:25:20

它将只执行父类的构造函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17809517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档