инициализация — неинициализированные переменные в переполнении стека

Руководство по PHP говорит:

Нет необходимости инициализировать переменные в PHP, однако это
очень хорошая практика Неинициализированные переменные имеют значение по умолчанию
их тип в зависимости от контекста, в котором они используются — логические значения
по умолчанию FALSE, целые числа и числа с плавающей точкой по умолчанию ноль, строки (например,
используется в echo) устанавливается как пустая строка, а массивы становятся пустыми
массив.

Я играл с неинициализированными переменными для игры в гольф, но программа не сделала то, что я ожидал. При рассмотрении я заметил это странное поведение (все используемые переменные неинициализированы):

php > $a = $a + 1;
PHP Notice:  Undefined variable: a in php shell code on line 1
php > $b = $b - 1;
PHP Notice:  Undefined variable: b in php shell code on line 1
php > $c++;
PHP Notice:  Undefined variable: c in php shell code on line 1
php > $d--;
PHP Notice:  Undefined variable: d in php shell code on line 1
php > var_dump($a);
int(1)
php > var_dump($b);
int(-1)
php > var_dump($c);
int(1)
php > var_dump($d);
NULL

+ 1, - 1, а также ++ работать как описано в руководстве. Тем не мение, -- не делает.

$a, $b, а также $c может быть использован для подсчета, впоследствии. Но $d--;не изменится $dценность, потому что $d является NULL,

Почему $d установлен в NULLне -1?

Использование префиксных операторов дает те же результаты, кстати: переменная установлена ​​в 1 за ++$v; но NULL за --$v;,

4

Решение

От руководство:

Примечание:… Уменьшение значений NULL также не оказывает никакого влияния, но их увеличение приводит к 1.

Таким образом, унифицированная переменная получает значение NULL. Увеличивая это значение, вы получаете 1 (как NULL + 1). Но попытка уменьшения не имеет эффекта, как описано в документации.

Кроме того, есть очень хорошее объяснение в соответствующей теме.

Это может показаться нелогичным, но это является следствием модели типизации языка. Поэтому, чтобы избежать такого поведения, всегда следуйте рекомендациям: всегда инициализируйте переменные и остерегайтесь арифметических операций с нечисловыми значениями.

1

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

Других решений пока нет …

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