Передача нескольких переменных в функцию PHP - PullRequest
2 голосов
/ 05 июля 2019

У меня проблема с передачей переменной в функцию PHP. Я использую веб-сервер Raspberry Pi с PHP 7.0.33. На малине все отлично работает. Когда я загружаю свои страницы на мой сервер Godaddy, на котором работает PHP 7.2, я получаю страшную белую страницу смерти. Я проследил это до следующего. Это упрощено.

На малиновом:

Вот так я отправляю переменные.

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

Вот так я получаю их в функции.

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

На малину я отправляю 3 вары ($uniqueid, $name, $title). Функция ищет 4 переменные ($uniqueid, $name, $title, $job), но игнорирует последнюю ($job), если она не существует.

Это не будет работать на сервере Godaddy, если я не отправлю 4 переменные и не получу 4 переменные. Поэтому для тестирования я просто подключил $x вот так, и все работает.

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

Итак, мой вопрос ... Это функциональная разница между PHP 7.033 и 7.2, работающим на Godaddy? Или в настройках PHP есть настройка, которая позволяла бы этому работать?

Ответы [ 2 ]

8 голосов
/ 05 июля 2019

Разница между ними, вероятно, связана с конфигурацией отчетов и регистрации ошибок PHP на обеих машинах.

РЕДАКТИРОВАТЬ: похоже, что php 7.1 выдвигал слишком мало аргументов, предупреждающих об ошибке.https://php.net/manual/en/migration71.incompatible.php

Что касается четвертого параметра, вы можете присвоить ему значение по умолчанию, равное нулю, так что требуются только 3 параметра.

function updateCustomer($uniqueid, $name, $title, $job = null)
2 голосов
/ 05 июля 2019

Да, произошло изменение между PHP 7.0 и PHP 7.1.

Ранее (PHP <= 7.0), генерировалось предупреждение для вызова пользовательских функций со слишком малым количеством аргументов. Теперь (PHP> = 7.1) это предупреждение переведено в исключение Ошибка. Это изменение касается только пользовательских функций, но не внутренних функций.

То, что вы видите в действительности - оно было изменено с предупреждения (чтобы оно работало, без ошибок - просто сообщение) на фактическую ошибку.

Решение состоит в том, чтобы просто исправить это , добавив значение по умолчанию к параметру, тем самым сделав его необязательным.

function updateCustomer($uniqueid, $name, $title, $job = null) {
   // ..
}
...