当从 PHP 中的父类继承时,尤其是在 Codeigniter 中会parent::__construct or parent::model()
做什么?
如果我没有__construct
父类,那会有什么不同?而且,建议采用哪种方式?
-添加-
重点更多地放在 Codeigniter 上,具体parent::__construct
取决于根据版本以不同方式调用,以及如果 Codeigniter 会自动执行此操作,是否可以省略它。
当从 PHP 中的父类继承时,尤其是在 Codeigniter 中会parent::__construct or parent::model()
做什么?
如果我没有__construct
父类,那会有什么不同?而且,建议采用哪种方式?
-添加-
重点更多地放在 Codeigniter 上,具体parent::__construct
取决于根据版本以不同方式调用,以及如果 Codeigniter 会自动执行此操作,是否可以省略它。
这是一个普通的类构造函数。让我们看下面的例子:
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 类的新对象。
现在看下面的例子:
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
parent::__construct 或 parent::model() 做什么?
这些函数的作用完全相同,只是构造函数在 PHP5 之前以类本身命名。我在你的例子中说你正在扩展 Model 类(并且在一些旧版本的 CI 上,因为你不需要使用 CI_model),如果我在这个 __construct 中是正确的,它与 model() 相同。
它将简单地执行父类的构造函数