php中的方法重载?

时间:2014-02-09 13:26:31

标签: php oop overloading

很抱歉,如果这是一个愚蠢的问题 - 我之前学过一些java,我知道PHP采用了一些面向对象的概念,我想知道是否有可能以类似的方式重载方法,如下所示:

public function add($number1, $number2){
        return ($number1 + $number2);
    }

    public function add($number1, $number2, $number3){
        return ($number1 + $number2 +$number3);
    }

这在PHP中是可能的还是我主要错过了一些东西 - 如果事先愚蠢而只是试图获得更深入的理解而道歉。

3 个答案:

答案 0 :(得分:2)

在PHP中,没有像java或c ++等其他编程语言中看到的真正的方法重载,但是你可以用这种方式使用可选参数

 public function add($number1, $number2, $number3 = 0){
     return ($number1 + $number2 + $number3);
 }

$ number3是可选的,值为0

或者您可以传递数组值或只使用try func_get_arg()

function foo()
{
    $numargs = func_num_args();
    echo "Number of arguments: $numargs<br />\n";
    if ($numargs >= 2) {
        echo "Second argument is: " . func_get_arg(1) . "<br />\n";
    }
    $arg_list = func_get_args();
    for ($i = 0; $i < $numargs; $i++) {
        echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
    }
}

答案 1 :(得分:2)

PHP不支持重载方法/函数,但它通过func_num_argsfunc_get_arg支持可变数量的参数

答案 2 :(得分:0)

PHP没有任何类型的函数签名模式匹配。你能做的最好就是模仿它:

class A {
  public function a() {
    $args = func_get_args();
    switch (count($args)) {
      case 0:
        $overload = array($this, '_a0');
        break;
      case 1:
        $overload = array($this, '_a1');
        break;
      default:
        // … etc
    }
    return call_user_func_array($overload, $args);
  }
  protected function _a0() { … }
  protected function _a1($arg) { … }
  // …
}

但这可能比值得IRL更麻烦。