2011-01-07 108 views

回答

8

PHP尋找最能夠找到的最頂層(最接近實例化的類)__construct的方法。然後它只執行那一個。

Class A { 
    public function __construct() { 
     echo "From A"; 
    } 
} 
Class B extends A { 
    public function __construct() { 
     echo "From B"; 
    } 
} 
Class C extends A {} 
Class D extends B {} 
Class E extends B { 
    public function __construct() { 
     echo "from E"; 
    } 
} 

new A(); // From A 
new B(); // From B 
new C(); // From A 
new D(); // From B 
new E(); // From E 

而且parent訪問下一個該名單,直到有沒有更多的(此時它會產生一個錯誤)......

所以,在E類,運行parent::__construct()將執行類B的構造函數。

在類B中,運行parent::__construct()將執行類A的構造函數。

A類,運行parent::__construct()因爲沒有構造函數會產生一個錯誤......

+0

快速而清晰。非常感謝你。 – 2011-01-07 21:11:54

1

答案是你必須調用它。

一個簡單的測試:

class A { 
     public function __construct() { 
      echo 'A'; 
     } 
} 

class B extends A { 
     public function __construct() { 
      echo 'B'; 
     } 
} 

$ab = new B(); 

應該告訴你所有你需要知道的。

0

你需要調用「父:: __結構()」從A的構造函數,如果A有一個。否則你不需要。

0
class A { 
    function __construct() { 
     echo 5; 
    } 
} 
class B_no_Constructor extends A { 

} 
class B_with_Constructor extends A { 
    function __construct(){} 
} 
//try one 
//new B_no_Constructor; //outputs 5 
//new B_with_Constructor; //outputs nothing