2012-10-29 47 views
15

Trong PHP Constructors and Destructors documentation nó khẳng địnhLà các hàm tạo cha mẹ được gọi nếu một lớp con KHÔNG định nghĩa một hàm tạo?

Lưu ý: constructors Chánh không được gọi ngầm nếu lớp trẻ định nghĩa một constructor. Để chạy một hàm tạo cha, một cuộc gọi đến parent :: __ construct() trong hàm tạo con là bắt buộc.

Nhưng điều gì sẽ xảy ra nếu lớp con không gọi hàm dựng, liệu trình tạo cha mẹ vẫn được gọi? Hoặc chúng ta có nên tạo một hàm khởi tạo gọi hàm tạo con không?

IE:

class BaseClass { 
    function __construct() { 
     print "In BaseClass constructor\n"; 
    } 
} 

class SubClass extends BaseClass { 
    function __construct() { 
     parent::__construct(); 
    } 
} 

Trả lời

14

Có lẽ đây là loại rõ ràng nhưng đã làm một số tìm kiếm xung quanh, và một câu trả lời trực tiếp cho câu hỏi này đáng ngạc nhiên là không phải là rất dễ dàng để tìm thấy như vậy ở đây nó là:

Nếu lớp con làm NOT định nghĩa một hàm tạo, khi đó hàm khởi tạo cha sẽ được gọi.

Trong ví dụ bên dưới $ obj sẽ vẫn gọi hàm tạo từ BaseClass vì SubClass không bao giờ được gọi là hàm tạo.

class BaseClass { 
    function __construct() { 
     print "In BaseClass constructor\n"; 
    } 
} 

class SubClass extends BaseClass { 
    //I do not have a constructor :(
} 

$obj = new SubClass(); 
+1

Có thể [hướng dẫn] (http://www.php.net/manual/en/language.oop5.decon.php) đã được cập nhật gần đây hơn, nhưng nó cho biết "Nếu đứa trẻ không xác định constructor sau đó nó có thể được thừa hưởng từ lớp cha giống như một phương thức lớp bình thường (nếu nó không được khai báo là private). " – MrWhite

+0

@ w3d Cảm ơn bạn đã cập nhật :). –

+0

Thậm chí bạn có thể khai báo một hàm tạo là riêng tư không? Điều đó dường như đánh bại mục đích của việc có một lớp học ở nơi đầu tiên. – eggmatters

6

Đưa vào tài khoản một hàm tạo là phương thức có thể bị ghi đè như bất kỳ phương pháp nào khác. Nếu lớp cha có một hàm tạo, tất cả các lớp con của nó sẽ kế thừa hàm tạo đó. Nếu một đứa trẻ ghi đè hàm khởi tạo, điều này sẽ được sử dụng khi tạo các đối tượng mới và hàm tạo của cha mẹ không được gọi ngầm. Nếu đứa trẻ không ghi đè hàm khởi tạo, hàm khởi tạo của cha sẽ được sử dụng. Khái niệm này áp dụng cho nhiều thừa kế.

Các vấn đề liên quan