2010-09-10 35 views
9

Tôi có hai lớp sau đây.Gọi hàm tạo của cha mẹ trong PHP

class Settings 
{ 
    function __CONSTRUCT() 
    { 
     echo "Settings Construct"; 
    } 
} 

class PageManager extends Settings 
{ 
    function __CONSTRUCT() 
    { 
     echo "PageManager Construct"; 
    } 
} 

$page = new PageManager(); 

Tôi nghĩ rằng sẽ hoạt động tốt, nhưng nó chỉ chạy hàm tạo của PageManager. Tôi cho rằng đó là vì tôi ghi đè lên hàm tạo của Setting. Có cách nào tôi có thể gọi constructor của cha mẹ là tốt?

Trả lời

16

Chỉ cần gọi nó bằng cách sử parent ::

/* Settings */ 
class Settings{ 
function __CONSTRUCT(){ 
    echo "Settings Construct"; 
} 
} 

/* PageManager */ 
class PageManager extends Settings{ 
function __CONSTRUCT(){ 
    parent::__CONSTRUCT(); 
    echo "PageManager Construct"; 
} 
} 

Có một cái nhìn tại manual(Constructors and Destructors)!

+7

tốt hơn nên gọi hàm tạo mẹ trước tất cả các lệnh trong hàm tạo con, do đó chúng tôi chắc chắn rằng đối tượng mẹ sẵn sàng sử dụng. –

+0

@Tomasz Kowalczyk Có phải không? Vâng, tôi đã thay đổi câu trả lời của tôi để phản ánh điều này vì vậy cảm ơn! :) – Iznogood

+0

@Thomasz Điều đó hoàn toàn phụ thuộc vào những gì mà cha mẹ và các nhà xây dựng con có nghĩa vụ phải làm. Nó không phải * luôn luôn * tốt hơn. – deceze

0

Ngoài ra: bạn nên biết rằng hành vi này của PHP không phải là duy nhất đối với hàm __construct().

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