php实现多构造器的类

有时候实例化类时,需要根据构造方法的参数个数进行初始化不用的内容,这有点像php函数或方法的可选参数:
<?php 
class A { 
    public function __construct() { 
        $a = func_get_args(); 
        $i = func_num_args(); 
        if (method_exists($this,$f='__construct'.$i)) { 
            call_user_func_array(array($this,$f),$a); 
        } 
    } 
    
    public function __construct1($a1) { 
        echo '__construct with 1 param called: '.$a1.PHP_EOL; 
    } 
    
    public function __construct2($a1,$a2) { 
        echo '__construct with 2 params called: '.$a1.','.$a2.PHP_EOL; 
    } 
    
    public function __construct3($a1,$a2,$a3) { 
        echo '__construct with 3 params called: '.$a1.','.$a2.','.$a3.PHP_EOL; 
    } 
} 
$o = new A('sheep'); 
$o = new A('sheep','cat'); 
$o = new A('sheep','cat','dog'); 

// 结果: 
// __construct with 1 param called: sheep 
// __construct with 2 params called: sheep,cat 
// __construct with 3 params called: sheep,cat,dog 
?> 

你可能感兴趣的:(construct)