Это случилось со мной несколько лет назад, прежде чем я узнал об этом, но мне все еще интересно. Когда я все еще изучал основы PHP, я случайно набрал $i = $i++;
Когда я протестировал веб-страницу в браузере, сервер разбился и потребовалось много времени, чтобы восстановить его. Я набрал некоторые довольно глупые вещи раньше и создал кучу бесконечных циклов, но по какой-то причине это было худшим. Кто-нибудь знает, почему эта линия была настолько «ядовитой»,
$i = $i++;
совпадает с $i = $i;
по существу.
К сожалению, $i = $i++;
известен как «неопределенное поведение» .
Все может произойти просто потому, что компилятор не может полностью понять, что происходит.
Здесь есть отличный вопрос SO, охватывающий подобное неопределенное поведение.
Это ничего не должно терпеть.
$i = $i++; var_dump($i); // NULL;
Из руководства по PHP
Нет необходимости инициализировать переменные в PHP, но это очень хорошая практика. Неинициализированные переменные имеют значение по умолчанию для своего типа в зависимости от контекста, в котором они используются.
Кроме того, by default, variables are always assigned by value
и поскольку вы используете Post Increment , значение uninitialized $ i (NULL) назначается сначала копией в $ i, фактически переписывая себя. Смотрите этот код, чтобы узнать, что произойдет:
$i = 0 $i = $i++; var_dump($i); // int(0);
Я не знаю, будет ли PHP по-прежнему пытаться увеличить значение переменной правой руки после назначения. Если вас это интересует, установите расширение PECL Parsekit и проверьте коды OP для получения дополнительной информации.
Так что, вероятно, что-то еще разбило ваш сервер.
$ php -r '$i=0; $i = $i++; echo "=> ".$i."\n";' => 0