在PHP中重载构造?

时间:2011-03-11 10:40:43

标签: php oop

php(5.3.7)是否支持重载?

示例:

class myclass{

function __construct($arg1) { // Construct with 1 param}
function __construct($arg1,$arg2) { // Construct with 2 param}

}


new myclass(123); //> call the first construct
new myclass(123,'abc'); //> call the second

2 个答案:

答案 0 :(得分:5)

您必须实施一次构造函数并使用func_get_argsfunc_num_args,如下所示:

<?php

class myclass {
    function __construct() {
        $args = func_get_args();

        switch (func_num_args()) {
            case 1:
                var_dump($args[0]);
                break;
            case 2:
                var_dump($args[0], $args[1]);
                break;
            default:
                throw new Exception("Wrong number of arguments passed to the constructor of myclass");
        }
    }
}

new myclass(123); //> call the first construct
new myclass(123,'abc'); //> call the second
new myclass(123,'abc','xyz'); //> will throw an exception

这样你可以支持任意数量的参数。

答案 1 :(得分:4)

不,但它支持optional parametersvariable number of parameters

class myclass{
  function __construct($arg1, $arg2 = null){
    if($arg2 === null){ // construct with 1 param //}
    else{ // construct with 2 param //}
  }
}

请注意,这有一个缺点,如果您真的希望能够提供null作为第二个参数,它将不会接受它。但在远程情况下,您希望始终可以使用func_*系列的util。