NetBeans & quot; Переменная $ out, по-видимому, неинициализирована & quot;

Хотя в целом подсказки — это хорошая вещь, есть ситуация, которая мне кажется довольно раздражающей, и мне было интересно, есть ли простой способ обойти это.

Рассмотрим функцию, которая имеет переменную только для вывода:

function dumb_foo($param1, $param2, &$out = null) {
$out = $param1.'||'.$param2;
return $param1*$param2;
}

Теперь звоню, например:

dumb_foo(5, 6, $my_out);

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

$my_out = null;
dumb_foo(5, 6, $my_out);

но это избыточно.

Есть ли другой способ избежать подсказки в этой ситуации, не удаляя ее полностью или не добавляя ненужную инициализацию?

6

Решение

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

Случай 1: Ссылочная переменная $in уже инициализирован но параметр$out НЕ инициализируется

function increment(&$out) {
$out++;
}

$in = 4 ; //NOTE: already initialized
increment($in);
echo $in; //add up to 5

случай 2: Ссылочная переменная $in НЕ инициализирован, но параметр$out инициализируется

    function increment(&$out = 4) {
$out++;
}

//No initialization of $in
increment($in);
echo $in; // add up to 1
//NOTE:No effect on referenced variable

случай 3: Ссылочная переменная $in НЕ инициализирован и параметр$out НЕ инициализируется

    function increment(&$out) {
$out++;
}

//No initialization of $in
increment($in);
echo $in; //add up to 1

По моему мнению, случай 3, будет правильным решением для примера, который вы описываете. Поэтому удаление инициализации обоих $out а также $my_out должен делать работу просто отлично. Что-то вроде этого:

function dumb_foo($param1, $param2, &$out) {
$out = $param1.'||'.$param2;
return $param1*$param2;
}
dumb_foo(5, 6, $my_out);

Надеюсь это поможет!

1

Другие решения

Я думаю, вы неправильно понимаете, как работают значения по умолчанию. Проблема в том, что $my_out не определен при следующем вызове

dumb_foo(5, 6, $my_out);

Итак, вы фактически проходите null (вместо того, чтобы вообще не передавать аргумент), что означает, что ваше значение по умолчанию никогда не используется (по совпадению, ваше значение по умолчанию также является нулевым). Чтобы проиллюстрировать разницу:

function dumb_foo(&$out = 'a') {
print $out . "\n";
}

dumb_foo($i); // $i is not defined, so prints nothing
dumb_foo(); // prints 'a', the default value

В любом случае вы можете полностью отключить подсказку «Unitialized Variable»:

Tools -> Options -> Editor -> Hints -> PHP -> Unitialized Variables
0

Netbeans имеет опцию под Tools -> Options -> Editor -> Hints -> PHP -> Uninitialized Variabled называется Check Variables Initialized by Reference

По-видимому, он отключен по умолчанию, поскольку он влияет на производительность среды IDE.

Подробнее об этом: Поток ошибок NetBeans

0
По вопросам рекламы [email protected]