PHP(v 4.3和5.3)缺失;继续使用打印但不适用于echo

时间:2016-09-16 09:05:40

标签: php echo continue

我正在使用PHP的较低版本v4.3和v5.3 测试代码,这是一些代码在没有分号后继续。它的作品和奇怪的输出。

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)

4 个答案:

答案 0 :(得分:5)

continue <foo>; 语句接受一个参数,因此您可以在其后添加更多表达式:

print

continue print();是一个表达式,可以用作其他语句的一部分,因此2是有效的语法。这也是输出continue print $i;的原因,$i == 2时正在执行单个语句echo

<anything> echo是一个语句,可以用作其他表达式的一部分,import math def factint(n): pos_n = abs(n) max_candidate = int(math.sqrt(pos_n)) for candidate in xrange(max_candidate, 0, -1): if pos_n % candidate == 0: break return candidate, n / candidate 是无效的语法。

答案 1 :(得分:4)

原因是continue语句接受一个可选的整数(要继续的循环数),如果没有给出,则默认为1。

如果没有分号,PHP会将下一个表达式作为整数。语言构造print返回一个整数,所以没关系。但是,echo也是一种语言构造,但它没有返回值。因此,当解析器正在寻找一个整数时,它会碰到一个没有返回值的语言结构,并且会混淆并引发错误。

真正的解决方案是输入分号,因为没有分号,你实际上可能会改变continue 的行为。

(在这种情况下你不是,因为print 总是返回一个,但在其他情况下,它实际上可能会在你的代码中引入错误。)

答案 2 :(得分:1)

非常确定这是因为,在早期版本的php中,你可以做到

Non-Renewing

然后它将继续f()返回的循环数(在这种情况下,$ i循环。如果它返回1,它将继续$ ii循环) 在现代版本的PHP中,您可以对数字进行硬编码,但不能继续使用变量编号,必须在编译时决定。和print()返回int。 echo不会,这就是为什么你得到一个错误,继续的参数必须是一个int。

答案 3 :(得分:0)

原因:输出:2

  

因为整个继续打印&#34; $ i \ n&#34 ;;被评估为单一   表达式,因此仅当$ i == 2为真时才调用print。 (该   print的返回值被传递以继续作为数字参数。)

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