Đây là một hàm tạo lớp bình thường. Hãy xem xét ví dụ sau:
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'
Như bạn thấy, lớp B thừa hưởng tất cả các giá trị và chức năng từ A. Vì vậy, các thành viên lớp $some_var
có thể truy cập từ A cũng như từ B. Bởi vì chúng tôi đã thêm một constructor trong lớp B, các nhà xây dựng của lớp A sẽ KHÔNG được sử dụng khi bạn đang tạo một đối tượng mới của lớp B.
Bây giờ nhìn vào các ví dụ sau:
class C extends A {
// empty
}
$c = new C;
$c->echo_some_var(); // will print out 'value added in class A'
Như bạn có thể thấy, bởi vì chúng tôi có không khai báo một hàm tạo, hàm tạo của c lass A được sử dụng ngầm. Nhưng chúng ta cũng có thể làm như sau, đó là tương đương với lớp C:
class D extends A {
function __construct() {
parent::__construct();
}
}
$d = new D;
$d->echo_some_var(); // will print out 'value added in class A'
Vì vậy, bạn chỉ cần sử dụng dòng parent::__construct();
khi bạn muốn có một constructor trong lớp con làm điều gì đó, và thực hiện constructor mẹ. Ví dụ đưa ra:
thông tin
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();
}
}
thêm có thể được tìm thấy ở đây: http://php.net/manual/en/language.oop5.php
tìm hiểu về 'hàm tạo'. –
parent :: __ construct() constructor SubClass [Doc] (http://php.net/manual/fr/language.oop5.decon.php) – Bora
tốt, tôi biết những gì các nhà xây dựng làm. Họ là một trong những phương pháp ma thuật sẽ tự động chạy khi lớp được khởi xướng nhưng điều tôi hỏi là sự khác biệt sẽ xảy ra nếu tôi không khai báo điều này vì kết quả dường như không khác biệt nhiều lắm với Codeigniter. –