我是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);