很抱歉,如果这是一个愚蠢的问题 - 我之前学过一些java,我知道PHP采用了一些面向对象的概念,我想知道是否有可能以类似的方式重载方法,如下所示:
public function add($number1, $number2){
return ($number1 + $number2);
}
public function add($number1, $number2, $number3){
return ($number1 + $number2 +$number3);
}
这在PHP中是可能的还是我主要错过了一些东西 - 如果事先愚蠢而只是试图获得更深入的理解而道歉。
答案 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_args和func_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更麻烦。