0

У меня есть функция, которая выглядит примерно так:Pass не определен индекс в функции PHP

function name(param1 = default, param2 = default, param3 = default) {...} 

Я вызываю функцию, передавая элементы массива в качестве параметров, как это:

name($param['foo'], $param['bar'], $param['hello']); 

Мой вопрос: если один (или более) элементов, переданных в вызове функции, не определен, как он обрабатывается внутри самой функции? Я спрашиваю, потому что я пытаюсь вызвать функцию, но у меня нет способа узнать, определены ли какие-либо элементы.

Внутри функции я попытался отладить параметр, пройденный с использованием isset(), is_null() и empty(), и я получил ложные, истинные и истинные значения соответственно. Это заставляет меня думать, что, поскольку что-то действительно передается, значение по умолчанию не задано. Если бы кто-нибудь мог объяснить, как что-то подобное обрабатывается, я был бы признателен.

+0

Хм, если вы передаете значения массива, почему бы просто не передать массив? – bksi

+0

Возможный дубликат [Как передать неопределенные vars функциям без ошибок E \ _NOTICE?] (Http://stackoverflow.com/questions/10130715/how-do-i-pass-undefined-vars-to-functions-without -e-notice-errors) – chris85

+0

@bksi Это совершенно возможно, но я думал, что если я точно знаю, какие элементы массива мне понадобятся, я мог бы просто передать их. – mcon

ответ

0

Функция вообще не имеет понятия, и, как правило, это не волнует, откуда пришел аргумент. например

$x = 2; 
foo($x); 
foo(2); 

Что касается foo(), то она будет просто увидеть 2 заходи, и ничего не скажет, что «это 2 был жёстко» или «это 2 был принят в через переменную».

Если вы передадите неопределенную переменную, тогда сама функция увидит значение null, а PHP выплюнет предупреждение об использовании неопределенной переменной, прежде чем код функции когда-либо сможет начать выполнение.

0

Вызов неопределенного индекса в массиве приводит к предупреждению.

Два правила для вас:

  • Pass/использовать только определенные вещи
  • Никогда не отключить предупреждения/ошибки

Пример:

$params = ['foo' => 1, 'bar' => null, 'nextKey' => null]; 

Общий подход состоит в передаче (под):

myMethod($params); 

Ваш метод принимает необходимые элементы.

1

Короткий ответ заключается в том, что он передается, NULL, который является постоянным значением, обозначенным как нулевое или неинициализированное значение.