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');
?>