【发布时间】:2019-10-23 18:55:31
【问题描述】:
PHP 代码1:
function f() {return 'hello world!';}
echo f().'<br>';
echo f(123).'<br>';
echo f(123, 'foo').'<br>';
输出:
hello world!
hello world!
hello world!
PHP代码2:
function g(int $x) {return 'hello world!';}
echo g(123).'<br>';
echo g(123, 'foo').'<br>';
输出:
hello world!
hello world!
问题
当传递的参数比函数预期的多时,是否可以强制 PHP 抛出错误?
相关问题
跟进
已经有一个 RFC 提出了一个 Strict Argument Count On Function Calls,不幸的是,由于被大量拒绝而被撤回。其中一些有趣的点是:
- “在测试过程中,可以清楚地衡量,建议的严格参数计数检查不会成为问题。实际上,情况恰恰相反。这将有助于提高 PHP7 及以后的 PHP 代码质量,因为所有警告都对捕捉错误甚至错误。”
- “由于许多争议点和全面拒绝,该 RFC 已被撤回,并且 RFC 作者不会再次提出。RFC 作者建议不要恢复此 RFC,因为它已经被拒绝了。”
还可以进行更深入的讨论:[PHP-DEV][RFC][DISCUSSION] Strict Argument Count
【问题讨论】:
-
检查func_num_args()的返回值,看是否符合你的预期,如果不符合,则抛出错误。请注意,当您尝试使用不正确数量的参数调用函数时,使用现代 IDE 通常会很明显。
-
我认为问题在于决定一个函数需要多少参数。如果有任何东西使用
func_get_args(),则必须从代码中解决。 -
@PatrickQ > “检查 func_num_args() 的返回” 在每个单独的函数中包含 func_num_args 非常痛苦。还有其他更自动化的方法吗?
-
@PatrickQ > “注意使用现代 IDE” 介意推荐一款这样的 IDE 吗?
-
您链接到的帖子有一个指向 bugs.php.net/bug.php?id=13892 的链接,涵盖了这一点。