向函数传递太多参数时,PHP 7是否会引发错误?

时间:2019-06-01 21:08:05

标签: php function parameters arguments

我将我的Web应用程序从5.6升级到php7,当我向函数传递的参数太少时,突然出现错误。在php 5.6中,我能够使用三个参数来使用函数,并且我可以传递两个参数,并且可以正常工作。还有其他人遇到吗?这是php7中的新功能吗?

我曾经能够将两个参数传递给具有三个参数的函数,但是突然我遇到了错误。

function displayField ($fieldname,$fieldval,$nobold)  { ... };

displayField ("testname","this value");

在这种情况下,我得到:

  

致命错误:未捕获的ArgumentCountError:的参数太少   函数displayField(),传入2   /home/cabox/workspace/php/encscripts.php在第31行和第3行   预期在/home/cabox/workspace/php/encscripts.php:3

有没有解决的办法,还是我必须找到每个传递少于预期参数的示例并重写代码?感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

摘自PHP手册:

  

以前,如果调用的用户定义函数的参数太少,则会发出警告。现在,此警告已升级为错误异常。此更改仅适用于用户定义的功能,不适用于内部功能。例如:

https://www.php.net/manual/en/migration71.incompatible.php

尝试将第三个参数设置为可选:

function displayField($fieldname, $fieldval, $nobold = null) { ... };

答案 1 :(得分:0)

功能:

function displayField($fieldname,$fieldval,$nobold) { ... };

写得不好(即使使用PHP 5.6) 我唯一可以建议的解决方案是重写其定义,使其按原样编写。

如果有一些可选参数,则函数必须在其定义中包含以下参数:

例如:

function displayField($fieldname,$fieldval,$nobold = null)
{ 
    //... 
};
在上述情况下,

$nobold是可选的,并且如果函数调用未设置此参数

displayField("testname","this value");

然后在函数内部未对其进行预置和

isset($nobold);

将返回false。

不要在这里寻找任何解决方法-这是死路一条。只需更改任何具有可选参数的函数的定义即可。

请注意,函数定义及其调用中的()应该紧随函数名称之后-之前不能有空格。

错误:

function displayField ($fieldname,$fieldval,$nobold) { ... };
displayField ("testname","this value");

好:

function displayField($fieldname,$fieldval,$nobold) { ... };
displayField("testname","this value");

一些other examplesadditional个。