Передача NULL-параметра точно так же, как и передача без параметра - PullRequest
7 голосов
/ 01 января 2011

Я работаю с функцией, подпись которой выглядит следующим образом

afunc(string $p1, mixed $p2, array $p3 [, int $p4 = SOM_CONST [, string $p5 ]] )

В некоторых случаях у меня нет данных для передачи последнего параметра $p5, но для согласованности я все же хочу передать что-то вроде NULL. Итак, мой вопрос, обрабатывает ли PHP передачу NULL точно так же, как ничего не пропускает?

somefunc($p1, $p2, $p3, $p4 = SOM_CONST);
somefunc($p1, $p2, $p3, $p4 = SOM_CONST, NULL);

Ответы [ 4 ]

9 голосов
/ 01 января 2011

Нет.Предположительно, точная подпись:

function afunc($p1, $p2, $p3, $p4 = SOM_CONST)

и функция использует func_get_arg или func_get_args для $p5.

func_num_args будет отличаться в зависимости от того, передаете ли вы NULL.Если мы сделаем:

{
    echo func_num_args();
}

, то

afunc(1,2,3,4,NULL);

и

afunc(1,2,3,4);

дадим 5 и 4.

Это зависит от функции,обрабатывать их одинаково.

7 голосов
/ 01 января 2011

Нет.Это то же самое, если значение параметра по умолчанию равно NULL, в противном случае нет:

function a($a, $b, $c = 42) {
    var_dump($c);
}

a(1, 2, NULL);

печатает NULL.

Так что вы не можете сказать, что это всегда одно и то же.NULL - это просто другое значение, и это не , что особенное.


Не говоря уже о необязательных параметрах: вызов a(1) выдаст ошибку (предупреждение), ноa(1,NULL) работает.

5 голосов
/ 01 января 2011

Передача NULL равняется точно , то же самое, что и не передача аргумента - если значение по умолчанию NULL, за исключением контекста функции func_num_args:

Возвращает количество аргументов, переданных функции.

<?php

function test($test=NULL) {
    echo func_num_args();
}

test(); //outputs: 0
test(NULL); //outputs: 1

?>
1 голос
/ 08 ноября 2018

Прежде всего, ваша подпись функции неверна. В PHP настоятельно рекомендуется сохранять необязательные параметры после всех необязательных параметров.

В этот момент, если вам нужно пропустить некоторые необязательные параметры, вы можете указать NULL в качестве их значений, и функция будет использовать их значение по умолчанию. Это будет похоже на использование оператора null coalesce в $x = $x ?? 12. Этот код установит $x в 12, только если $x === NULL.

Использование количества аргументов с func_num_args() здесь даже не должно упоминаться, потому что независимо от значения аргумента, если вы передадите аргумент в вызове функции, этот аргумент будет замечен функцией. И когда дело доходит до внутренней работы функции, дополнительный аргумент NULL так же хорош, как и любое другое значение. Вашему коду может потребоваться аргумент NULL для выполнения какой-либо задачи.

Единственная специальная обработка происходит, когда необязательный параметр функции заполняется аргументом NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...