gpt4 book ai didi

php - 当 Controller 类扩展父 Controller 时,为什么我们仍然需要父构造函数?

转载 作者:可可西里 更新时间:2023-10-31 23:06:55 24 4
gpt4 key购买 nike

我是 CodeIgniter 和 OOP 的初学者。我正在阅读 CI 教程的一页 here .我发现了一个问题。
看这段代码:

<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
}

我认为如果我们创建一个扩展 CI_Controller 的类,我们假设它必须具有其父类中的所有方法和属性(尽管我们可以覆盖它们)。那么,为什么代码中会有parent::__construct();呢?

最佳答案

__construct() 是一个类的构造方法。如果您从中声明一个新的对象实例,它就会运行。然而,如果一个类实现了它自己的 __construct(),PHP 将只运行它自己的构造函数,而不是它父类的构造函数。例如:

<?php

class A {
public function __construct() {
echo "run A's constructor\n";
}
}

class B extends A {
public function __construct() {
echo "run B's constructor\n";
}
}

// only B's constructor is invoked
// show "run B's constructor\n" only
$obj = new B();

?>

在这种情况下,如果您需要在声明 $obj 时运行类 A 的构造函数,则需要使用 parent::__construct():

<?php

class A {
public function __construct() {
echo "run A's constructor\n";
}
}

class B extends A {
public function __construct() {
parent::__construct();
echo "run B's constructor\n";
}
}

// both constructors of A and B are invoked
// 1. show "run A's constructor\n"
// 2. show "run B's constructor\n"
$obj = new B();

?>

在 CodeIgniter 的情况下,该行运行 CI_Controller 中的构造函数。该构造函数方法应该以某种方式帮助您的 Controller 代码。而且您只想让它为您做所有事情。

关于php - 当 Controller 类扩展父 Controller 时,为什么我们仍然需要父构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15063890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com