为什么三元运算符在php中使用print而不使用echo?

为什么三元运算符在php中使用print而不使用echo?,php,printing,echo,ternary-operator,Php,Printing,Echo,Ternary Operator,这项工作: $number = 1; $number == 1? print 'yes' : print 'no'; 但这不起作用: $number = 1; $number == 1? echo 'yes' : echo 'no'; 为什么在PHP中会发生这种情况?检查日志以获取警告。三元运算符必须返回一个值print始终返回1,但echo不返回值 关于您关于在函数中放入echo的评论,默认情况下,未显式返回值的函数返回null,因此,函数确实返回值: 三元运算符的参数必须是表达式p

这项工作:

$number = 1;
$number == 1? print 'yes' : print 'no';
但这不起作用:

$number = 1;
$number == 1? echo 'yes' : echo 'no';

为什么在PHP中会发生这种情况?

检查日志以获取警告。三元运算符必须返回一个值
print
始终返回
1
,但
echo
不返回值

关于您关于在函数中放入
echo
的评论,默认情况下,未显式返回值的函数返回
null
,因此,函数确实返回值:


三元运算符的参数必须是表达式
print'yes'
是一个表达式,但
echo'yes'
不是,因为
echo
是一种特殊语法

使用三元运算符作为echo的参数,而不是相反

echo $number == 1 ? 'yes' : 'no';
这和你不能写作的原因是一样的:

$var = echo 'yes';

请参阅:简言之,它只接受具有返回值的操作,如
打印
。同样,请参阅手册:根据我的测试,它是否返回值并不重要。我创建了一个函数“foo”,在它里面我只写了一个echo(不返回任何东西),然后我用这个“foo”函数代替了print,即使它不返回任何东西,它也能工作。@user3646717,请参阅我的最新评论答案。谢谢Barmar,你知道我如何区分特殊语法和其他语法吗,有什么链接可以让我进一步了解这个主题吗?@user3646717您可以从文档中看出。它表示,
print
返回
1
,这意味着它必须是一个表达式。但是
echo
的文档说它没有返回任何东西。再次感谢Barmar。