当我向函数传递太多参数时,为什么PHP不抛出错误?


Why does PHP not throw an error when I pass too many parameters to a function?

我是php的n00b。我正在学习默认参数,所以我创建了这个函数。

function doFoo($name = "johnny"){
    echo "Hello $name" . "<br />";
}

我打了这些电话

doFoo();
doFoo("ted");
doFoo("ted", 22);

前两个输出的是预期的内容,即

Hello johnny
Hello ted

但是第三次调用也打印了

Hello ted

我以为会出现错误,毕竟函数只有一个参数,而我却用两个参数来调用它。
为什么没有错误?

PHP不会在函数重载时抛出错误。

向函数传递多于需要的参数没有错

只有当你传递的参数很少时,你才会得到错误。

function test($arg1) {
 var_dump($arg1);
}
test();

以上将导致以下错误:
未捕获的ArgumentCountError: Too few arguments to function…

如果你想获取第一个参数和传递给函数的所有其他参数,你可以这样做:

function test($arg1, ...$args) {
 var_dump($arg1, $args);
}
test('test1', 'test2', 'test3');

导致:
字符串(5)"test1"数组(2){[0] =>字符串(5)"test2"[1] =>字符串(5)"test3"}

因为PHP函数支持可变数量的参数。

显然是因为PHP程序员喜欢这样。有一个字符串参数计数RFC在发送太多参数时发出通知,但它被彻底拒绝了,让我沮丧:https://wiki.php.net/rfc/strict_argcount

应该只打印一个通知,而不打印错误。我想你设置了错误报告,所以通知不会显示在屏幕上。

试着把这个粘贴到你的代码的顶部:

error_reporting(E_ALL | E_STRICT);