PHP (v 4.3 и 5.3) отсутствует; после продолжения работает с печатью, но не работает с эхом

Я тестирую код с младшая версия v4.3 и v5.3 PHP, это немного кода с продолжить после без точки с запятой. Это работает и дает странный вывод.

for ($i = 0; $i < 5; ++$i) {
if ($i == 2)
continue
print "$i\n";
}
//Output: 2 its strange

Но с echo выдает ошибку Parse error: syntax error, unexpected 'echo' (T_ECHO)

for ($i = 0; $i < 5; ++$i) {
if ($i == 2)
continue
echo "$i\n";
}
//Output:  Parse error: syntax error, unexpected 'echo' (T_ECHO)

2

Решение

continue оператор принимает параметр, так что вы можете добавить больше выражений после него:

continue <foo>;

print является выражением и может использоваться как часть других выражений, поэтому continue print(); действительный синтаксис. Это также почему 2 выводится, единственное утверждение continue print $i; выполняется, когда $i == 2,

echo это утверждение и может не использоваться как часть других выражений, <anything> echo неверный синтаксис

5

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

Причина в том, что оператор continue принимает необязательное целое число (число циклов для продолжения), которое по умолчанию равно 1, если ни один не указан.

Не имея точки с запятой, PHP примет следующее выражение как целое число. Языковая конструкция print возвращает целое число, так что все в порядке. Тем не мение, echo это также языковая конструкция, но она не имеет возвращаемого значения. Поэтому, пока синтаксический анализатор ищет целое число, он сталкивается с языковой конструкцией без возвращаемого значения, он запутывается и выдает ошибку.

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

(В этом случае вы не, потому что печать всегда возвращает один, но в других случаях это может привести к ошибкам в вашем коде.)

4

почти наверняка, потому что в более ранних версиях php

function f(){return 2;}
for($i=0;$i<9;++$i){
for($ii=0;$ii<99;++$ii){
continue f();
}
}

и затем он продолжит работу с номером цикла, возвращенным функцией f () (в этом случае цикл $ i. Если он вернет 1, он продолжит цикл $ ii).
в современных версиях PHP вы можете жестко закодировать число, но вы больше не можете продолжать работать с переменным числом, это должно быть решено во время компиляции. и print () возвращает int. echo не делает, поэтому вы получаете ошибку, аргумент для продолжения должен быть int.

1

Причина: Выход: 2

потому что весь продолжить выведите «$ i \ n»; оценивается как единое целое
выражение, и поэтому print вызывается только когда $ i == 2 верно. (The
возвращаемое значение print передается для продолжения в качестве числового аргумента.)

http://php.net/manual/en/control-structures.continue.php

0