【问题标题】:Is it possible to globally ignore "Error: Too few arguments to function"?是否可以全局忽略“错误:函数参数太少”?
【发布时间】:2018-10-03 11:39:49
【问题描述】:

我的代码中有几个函数,它们需要多个参数。

我使用的是 PHP 5.5,每当我只输入第一个参数时,它都能正常工作,而只是忽略了第二个参数(我猜它认为它是“0”)。

但我刚刚升级到 PHP 7.2,这已经成为一个问题。

因此,有没有办法让 PHP 7.2 继续将未定义的参数视为“0”,而不是修复我的所有代码,这些代码分布在多个文件中,以避免导致页面崩溃?

编辑:

示例函数:

function calculate( $m,$status ) {

    return ''.$m.''.$status.'';

}

如果$status不存在,它应该简单地输出$m

【问题讨论】:

  • 正确的修复(可能)涉及更改函数,而不是调用者。您必须将默认值添加到并不总是提供的参数中。这可能比您想象的要少 - 有多少函数给您带来了这个问题?
  • 伙计们,PHP 4.3.x 到 7.0.x 发出警告,但 PHP 7.1+ 发出致命异常。
  • 我会看到为这些参数设置默认值作为升级到 PHP 7.2 的一部分。如果工作量太大,那就不要升级那么远。更严格的类型是升级到 7.x IMO 的最佳原因之一,其次是性能。
  • 您可以升级到 PHP 7.0.29 而无需修复您的代码。
  • 旁注:您可以将return ''.$m.''.$status.''; 更改为return $m . $status;。不需要引号。

标签: php function arguments parameter-passing


【解决方案1】:

最简单、最简洁的方法是为每个参数提供一个默认值,使它们成为可选:

function myFunction ($requiredParam, $optionalInt = 0, $optionalStr = '') {
    //
}

那么您可以毫无错误地调用myFunction(1); 或myFunction(1,2); myFunction(1,2,'x');。

如果您对why this happens 感到好奇,那是因为

"以前,调用用户定义的会发出警告 参数太少的函数。现在,这个警告已经被推广了 到错误异常。此更改仅适用于用户定义的 函数,而不是内部函数。”

【讨论】:

  • 谢谢。不知道这是可能的。
  • @rockyraw ;) 很高兴为您提供帮助
猜你喜欢
  • 2010-12-16
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多