PHP ArgumentCountError服务器是否特定?

时间:2017-11-13 09:20:09

标签: php parameter-passing

自从过去两天我面临非常奇怪的问题,我有两个不同的服务器,一个是Windows(php v5.3),第二个是linux(php v7.1 ngnix)。我有一个项目(由某人编写)已经在Windows服务器上运行,现在我必须在linux服务器上移动这个项目(没有代码更改)。我的问题,有一个登录功能 -

Function userAuthentication($username,$password,$locationId,$url,$source)
{
....
}

它正在调用(在Windows服务器上)

userAuthentication($username, $password,'',$url) ;

我知道参数在这种情况下是不匹配的,但是在我测试的时候,这段代码实际上给了我结果并且在windows上运行正常但是同样的代码在Linux服务器上给了我明显的错误 -

  

ArgumentCountError:函数参数太少   身份验证:: userAuthentication(),4传入

可以通过更改代码来解决这个问题,但我不想要(可以使用相同的错误进行多项功能)。 我已经谷歌搜索但没有找到任何东西。我很好奇,为什么这不会发生在Windows上。是特定于ArgumentCountError服务器还是Windows服务器没有像linux,php版本或任何其他配置那样关键。我想解决这个问题的方法。?

任何人都有任何想法请帮助我,谢谢

2 个答案:

答案 0 :(得分:3)

环境(Windows与Linux)之间的差异不是PHP版本。

正如您在从PHP 7.0到7.1(链接:http://php.net/manual/en/migration71.incompatible.php

的迁移中所看到的

投掷过少的函数参数

  

以前,会发出警告以调用用户定义的   参数太少的函数。现在,这个警告已被提升   到错误异常。此更改仅适用于用户定义   功能,而不是内部功能。例如:

<?php
function test($param){}
test();

以上示例将输出类似于:

的内容
  

致命错误:未捕获ArgumentCountError:参数太少   函数test(),0在行%d上的%s中传递,在预期中恰好为1   %S:%d

如何解决?

您必须定义函数中的所有参数。它可能会“不舒服”#34;但作为开发人员,这是一种更好的做法。不要在这个问题上保持懒惰。

答案 1 :(得分:1)

这与更新的PHP版本有关,因为他们应该对调用更加严格。如果您希望再次使用此选项,请通过为其提供默认值来使其他参数可选。

您应该在本地更新到7.x以防止出现此类问题。

像:

ply