Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ECHO在FOR循环的第三个exp中不起作用,但PRINT是否起作用?_Php_Loops_For Loop_Language Construct - Fatal编程技术网

Php ECHO在FOR循环的第三个exp中不起作用,但PRINT是否起作用?

Php ECHO在FOR循环的第三个exp中不起作用,但PRINT是否起作用?,php,loops,for-loop,language-construct,Php,Loops,For Loop,Language Construct,为什么这是有效的: for ($i = 0; $i < 10; print $i++); for($i=0;$i

为什么这是有效的:

for ($i = 0; $i < 10; print $i++);
for($i=0;$i<10;打印$i++);
这就产生了语法错误:

for ($i = 0; $i < 10; echo $i++);
for($i=0;$i<10;echo$i++);
有什么区别?两者都是语言结构。
有什么规则是有效的,什么规则是无效的吗?

你是对的,
echo
print
都是语言结构,但是
print
的行为比你想象的更像一个函数。在内部,
print
被PHP视为一个函数,因为它总是返回一个值(
int1

正是由于这一关键差异,PHP解释器允许在
for
循环中调用这个特殊的语言结构-因为它将
print
视为一个函数,因此,它可以在通常使用函数的上下文中使用。考虑下面的代码

<?php (1 > 0) ? print 'true' : print 'false'; ?>
这段代码将起作用,因为我们不再直接使用
echo
语言构造,而是为它创建了一个包装器函数。这个函数将被执行,PHP不再关心该函数的内容,或者我们在其中使用的语言结构

通常,语言构造不能在我的第二个示例的上下文中使用,也不能在
for
循环的上下文中使用。这种类型的语法仅对函数和方法有效(这就是为什么
print
有效而
echo
无效)。

可能重复的
<?php (1 > 0) ? echo 'true' : echo 'false'; ?>
<?php (1 > 0) ? return 'true' : yield 'false'; ?>
<?php (1 > 0) ? continue : break; ?>
<?php

    function _echo($a)
    {
        echo $a;
    }

    (1 > 0) ? _echo('true') : _echo('false');

?>