2011-01-07 109 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