我将我的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
有没有解决的办法,还是我必须找到每个传递少于预期参数的示例并重写代码?感谢您的帮助!
答案 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");