2

我在将变量传递给 PHP 函数时遇到问题。我正在使用 PHP 7.0.33 运行 Raspberry Pi 网络服务器。覆盆子上的一切都运行良好。当我将页面上传到运行 PHP 7.2 的 Godaddy 服务器时,我得到了可怕的死亡白页。我将其追溯到以下内容。这是简化的。

在覆盆子上:

这就是我发送变量的方式。

updateCustomer($uniqueid, $name, $title);  

这就是我在函数中接收它们的方式。

function updateCustomer($uniqueid, $name, $title, $job){
}

在覆盆子上,我发送 3 个变量 ( $uniqueid, $name, $title)。该函数正在寻找 4 个变量 ( $uniqueid, $name, $title, ) 但如果最后一个变量 ( ) 不存在则$job忽略它。$job

除非我发送 4 个变量并接收 4 个变量,否则这在 Godaddy 服务器上不起作用。因此,为了进行测试,我只是像这样插入$x并且它可以工作。

function updateCustomer($uniqueid, $name, $title, $x){
}

所以我的问题...这是 PHP 7.033 和 Godaddy 上运行的 7.2 之间的功能差异吗?或者 PHP 设置中是否有允许它工作的设置?

4

2 回答 2

8

两者之间的差异可能与两台机器上的 PHP 错误报告/日志配置有关。

编辑:看起来 php 7.1 将太少的参数警告提升为错误。https://php.net/manual/en/migration71.incompatible.php

至于第四个参数,你可以给它一个默认值null,这样就只需要3个参数。

function updateCustomer($uniqueid, $name, $title, $job = null)
于 2019-07-05T19:48:08.637 回答
2

是的,PHP 7.0 和 PHP 7.1 之间发生了变化。

以前 (PHP <=7.0),调用参数太少的用户定义函数会发出警告。现在(PHP >=7.1),此警告已升级为错误异常。此更改仅适用于用户定义的函数,而不适用于内部函数。

这就是您所看到的效果 - 它已从警告(因此它有效,没有错误 - 只是一条消息)更改为实际错误。

解决方案是通过向参数添加默认值来简单地修复它,从而使其成为可选的。

function updateCustomer($uniqueid, $name, $title, $job = null) {
   // ..
}
于 2019-07-05T19:57:13.027 回答