Ошибка в аргументе функции PHP - PullRequest
7 голосов
/ 09 ноября 2011

Моя функция проверки выглядит так

function validate($data, $data2 = 0, $type)
{
...

Пример вызова функции

if ($result = validate($lname, 'name') !== true)
        response(0, $result, 'lname');

Как видите, моя функция проверки имеет 3 входных переменной. Я не часто использую второй var - $ data2, поэтому по умолчанию устанавливаю 0. Но когда я вызываю эту функцию в качестве примера (насколько я знаю, это означает, что $ data = $ lname, $ data2 = 0, $ type = 'name'), получая сообщение об ошибке

Missing argument 3 ($type) for validate() 

Как я могу это исправить?

Ответы [ 5 ]

21 голосов
/ 09 ноября 2011

Отсутствует аргумент 3 ($ type) для validate ()

Всегда перечисляет необязательные аргументы в качестве последних аргументов. Поскольку в PHP нет ни именованных параметров, ни «перегрузки Java», это единственный способ:

function validate($data, $type, $data2 = 0) {
}
6 голосов
/ 09 ноября 2011

Вы должны как минимум установить тип $ в этой строке:

function validate($data, $data2 = 0, $type)

на NULL или '', как вы можете видеть здесь:

function validate($data, $data2 = 0, $type = null)

PHP позволяет вам установить значение для параметров, но вы не можете определить параметр БЕЗ предустановленного значения ПОСЛЕ параметров, которые ЕСТЬ заданное значение. Поэтому, если вам нужно всегда указывать третий параметр, вам нужно переключить второй и третий параметры следующим образом:

function validate($data, $type, $data2 = 0)
0 голосов
/ 13 марта 2019

Обратите внимание, что начиная с PHP 7.1 это приведет к фатальной ошибке PHP, а не просто к предупреждению:

PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function validate(), 2 passed in /path/to/file.php on line X and exactly 3 expected

Дополнительная информация: http://php.net/manual/en/migration71.incompatible.php

0 голосов
/ 22 марта 2018
function validate($data, $data2, $data3, $data4, $data5)

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

if ($result = validate($lname, 'name','','','') !== true)
0 голосов
/ 09 ноября 2011

С http://php.net/manual/en/functions.arguments.php

Обратите внимание, что при использовании аргументов по умолчанию любые значения по умолчанию должны быть справа от любых аргументов, отличных от заданных по умолчанию; в противном случае все будет работать не так, как ожидалось

Вам следует переключить второй и третий аргументы функции, сделав необязательный аргумент последним. Так и становится:

function validate($data, $type, $data2 = 0)
{ ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...