class A { var $a; function __construct() { $argc = func_num_args(); $args = func_get_args(); echo get_class($this)."<br>";//class C call_user_func_array(array($this,"__construct".$argc),$args); //这里的$this指向的是class C的实例化对象,因为C内有已经覆盖了父类的方法__construct1,所以调用的是C内的__construct1方法 //call_user_func_array(array(__CLASS__,"__construct".$argc),$args);//这个才是调用类A的__construct1方法 } function __construct1($x) { $this->a = $x; } } class B extends A{ function __construct() { $argc = func_num_args(); $args = func_get_args(); call_user_func_array(array($this,"parent::__construct"),$args); } } class C extends B { function __construct() { parent::__construct(3); } function __construct1($x) { $this->a = 'hello world!'; } } $o_test = new C(2); echo $o_test->a; //hello world
var $a;
function __construct() {
$argc = func_num_args();
$args = func_get_args();
echo get_class($this)."<br>";//class C
call_user_func_array(array($this,"__construct".$argc),$args); //这里的$this指向的是class C的实例化对象,因为C内有已经覆盖了父类的方法__construct1,所以调用的是C内的__construct1方法
//call_user_func_array(array(__CLASS__,"__construct".$argc),$args);//这个才是调用类A的__construct1方法
} function __construct1($x) {
$this->a = $x;
}
} class B extends A{
function __construct() {
$argc = func_num_args();
$args = func_get_args();
call_user_func_array(array($this,"parent::__construct"),$args);
}
} class C extends B {
function __construct() {
parent::__construct(3);
} function __construct1($x) {
$this->a = 'hello world!';
}
}
$o_test = new C(2);
echo $o_test->a; //hello world