在 PHP 的一行 if 语句中使用 echo

9

我以前使用的写法是将if语句和echo语句结合成一行,就像这样:

<?php echo ( true ) ? 'true' : 'false'; ?>

今天我修改了一个已存在的多行 if 语句,结果 echo 结束时出现在语句中,导致出现解析错误:
<?php ( true ) ? echo 'true' :  echo 'false'; ?>

使用print代替echo就可以解决问题了。我猜这是因为print是一个函数。更新:print不是一个函数,它只是像一个函数一样表现,这意味着它有一个返回值。
<?php ( true ) ? print 'true' :  print 'false'; ?>

我不理解为什么echo无法工作。我理解上述语法只是一个常见if语句的简写,所以这也不应该起作用:
if (true) echo 'true'; else echo 'false';

但是它确实有用。谁知道呢?

2
这可能会有所帮助:https://dev59.com/nHVC5IYBdhLWcg3woCnN - AlexP
回答:请在问题中提供翻译后的文本。 - Janith Chinthana
echo 在右侧编写三元表达式。 - mickmackusa
3个回答

3

正如你从PHP文档中所读到的:

http://php.net/manual/zh/language.operators.comparison.php

The expression (expr1) ? (expr2) : (expr3) evaluates to expr2 if expr1 evaluates to TRUE, and expr3 if expr1 evaluates to FALSE.

三元运算符需要表达式,这只是说“一个值”的花哨方式。Echo不返回任何东西,因此没有值,这意味着它不是表达式。另一方面,print作为函数返回了“something”,因此它是一个有效的表达式。

2
由于您在问题中只提到了print是一个函数,但实际上print不是一个函数,而是具有一些返回值,因此它也可以用于表达式。另一方面,echo没有任何返回值。
同时需要注意的是,三元运算符会返回一个值。
在类C语言中,有语句和表达式之分。从语法上讲,echo是一个简单的语句,就像breakreturn一样,而print是一个(一元)运算符,就像“!”或“~”一样。因此,与任何其他语句一样,echo不能成为表达式的一部分。
PHP将echo视为语句,无论您写什么都会原样显示。
您可以在这里阅读详细的解释:参考:比较PHP的print和echo

@oGeez 正确的语法是不使用 print 函数,但它会返回值,无论是否使用 echo。我已经更新了我的答案。 - R R

2
在PHP中,print和echo不是函数而是语言结构,基本上print和echo不需要使用括号。
它们的区别在于print是语言结构,可以像函数一样运行,但echo不能! PHP:echo - 手册

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接