- 66
- 0
众所周知,当我们传少了参数到 PHP 函数的时候,会报 PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function xxx() 的错误,比如:
<?php
function hello($name)
{
echo "Hello, {$name}" . PHP_EOL;
}
hello();
// Fatal error: Uncaught ArgumentCountError: Too few arguments to function hello(), 0 passed in D:\tmp\hello.php on line 7 and exactly 1 expected in D:\tmp\hello.php:2
那如果我们将函数改写成下面这样呢?
<?php
function hello()
{
echo "Hello" . PHP_EOL;
}
hello("world");
// Hello
居然不会抛出 Too many arguments to function hello() 的错误!难道是 world 这个字符串被扔掉了而没有传进去?
将上面的函数再改一下:
<?php
function hello()
{
foreach (func_get_args() as $arg)
{
echo $arg . PHP_EOL;
}
}
hello("world");
hello("foo", "bar", "baz");
// world
// foo
// bar
// baz
全都已经传进去了呀!带着好奇心搜了一下,发现 StackOverflow 上已经有人问过这个问题了:
https://stackoverflow.com/que...
但是高票回答只是简简单单的一句话:
PHP doesn't throw an error on function overload.
然后还从评论区里翻到了这么一个 bug report:https://bugs.php.net/bug.php?...
官方给出的是 Wont fix,(not a bug but a feature???)
除了上面两个链接之外,还找到了这个:
http://www.php-internals.com/...
但是看不太懂...
目前我能找到的资料就这些,很好奇但是又不是很清楚是怎么回事,先问几个问题:
- PHP 的函数参数最后是不是有个隐式的
可变长参数?- PHP 的函数传参是怎么实现的?
- 像代码段 1,是不是其实正常传参的时候函数内部已经隐式使用
func_get_args()帮我们把第一个参数值装到$name里面去了?
然后再问一个问题:
像我这种没多少底层经验的新手,如果想阅读 PHP 的源码,该如何读起?把 php-internals 啃一遍会有帮助吗? - 共 0 条
- 全部回答
-
过去、那是昨天 普通会员 1楼
PHP函数的参数数量应该在函数定义中明确指定。如果你在一个函数中声明了太多参数,PHP解释器会抛出 Too Many Arguments 错误。然而,PHP函数的官方文档并没有明确说明,为何某些函数会没有 Too Many Arguments 错误。
这可能是由于一些特殊情况引起的。例如,某些函数可能需要一个或者多个额外的参数,但在函数定义中没有明确指出。或者,这些参数可能在函数调用时被替换,而不是被传递给函数。此外,还有一些函数可能在函数调用时不需要任何参数。
如果你想让 PHP 函数没有 Too Many Arguments 错误,你需要确保在函数定义中明确指定函数的参数数量,并在调用函数时提供足够的参数。如果你不确定,你可能需要查阅 PHP 的官方文档或者咨询 PHP 的开发者。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
