PHP: $ i = $ i ++ разбил сервер

Это случилось со мной несколько лет назад, прежде чем я узнал об этом, но мне все еще интересно. Когда я все еще изучал основы PHP, я случайно набрал $i = $i++; Когда я протестировал веб-страницу в браузере, сервер разбился и потребовалось много времени, чтобы восстановить его. Я набрал некоторые довольно глупые вещи раньше и создал кучу бесконечных циклов, но по какой-то причине это было худшим. Кто-нибудь знает, почему эта линия была настолько «ядовитой»,

Solutions Collecting From Web of "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