8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Rich G 2月前

40 0

我是 php 新手。我正在学习默认参数,所以我创建了这个函数。function doFoo($name = \'johnny\'){ echo \'Hello $name\' . \'
\';} 我做了这些调用doFoo();doFo...

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

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

我打过这些电话

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

前两个打印出了预期的内容,即

Hello johnny
Hello ted

但第三次调用也打印了

Hello ted

我原本预计会出现错误,毕竟该函数是为一个参数而创建的,而我却用两个参数来调用它。
为什么没有错误?

帖子版权声明 1、本帖标题:为什么当我向函数传递太多参数时 PHP 不会抛出错误?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Rich G在本站《class》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 向函数传递比所需更多的参数没有错

    如果您传递了几个参数,则仅会出现错误。

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

    以上将导致以下错误:
    未捕获的 ArgumentCountError:函数参数太少……

    如果您想要获取第一个参数以及传递给函数的所有其他参数,您可以执行以下操作:

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

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

  • 这是错误的,至少在 2021 年是错误的。向函数传递超过预期的参数会引发错误。在传递超过 2 个参数时,请参见此有关 intval() 的示例:PHP 警告:intval() 最多需要 2 个参数,/path/to/file.php 第 XXX 行中给出了 4 个参数

  • 回复上面的评论。似乎许多(全部??我没有全部测试!)内置 PHP 函数如果传递了太多参数,就会出错,但用户定义函数则不会出错 - 演示:3v4l.org/UQAfO

  • 抱歉,这个答案真的很差。函数/方法重载意味着有多个同名但参数签名不同的方法。它并不意味着接受对参数过多的方法的调用,然后删除不符合签名的额外参数。PHP 接受比方法中要求的更多的参数的原因是该语言的一个根本缺陷,而不是任何公认的编程语法实践的结果。

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

返回
作者最近主题: