今天早些时候我试着这样做:
示例1:
<?php
echo $myVar || "rawr";
?>我认为如果设置了$myVar,它可能会打印出来,如果没有,则打印"rawr"。它打印了一个1,我假设这是OR测试的结果。
我当时尝试的是:
示例2:
<?php
if ($myVar)
{
echo $myVar;
}
else
{
echo "rawr";
}
?>这就是我想要达到的目标。
我想我理解为什么第一次打印OR测试的结果而不是其中的一个变量,以及为什么我尝试它-最近花了一些时间在bash上:)
有人能告诉我是否有方法在示例2中执行文本,但使用与示例1类似的语法吗?
发布于 2011-09-21 14:21:12
在这个部门中,PHP是出了名的不雅之处,而且没有一种好的方法来进行这个测试。
作为一种通用解决方案,您需要像在empty($var) ? "rawr" : $var中那样使用三元操作符。然而,在实践中,所发生的情况是有以下两种情况之一:
1.您自己的变量
在这种情况下,您自己定义变量,最好的解决方案就是在定义变量的位置(可能是用三元操作符)给它一个已知的默认值。
2.在数组中
如果数组是一个不应该像超级全局那样被触摸的数组,那么您可以将测试封装在一个函数中(这几乎是每个人都要做的)。
如果数组是您管辖范围内的数组,但它来自外部源,则可以使用“添加默认值”技巧:
$incoming = array(...);
$defaults = array("foo" => "bar");
// Inject the defaults into $incoming without overwriting existing values
$incoming += $defaults;此时,您知道一个事实,即$defaults中的每个键也存在于$incoming中。
发布于 2011-09-21 14:17:21
PHP 5.3:
echo $myVar ?: 'rawr';5.3前:
echo $myVar ? $myVar : 'rawr';如果没有设置$myVar,就必须使用isset($myVar) and $myVar作为条件(这样就不能使用简写的?:语法,因为如果设置了1,而不是值)。
echo (isset($myVar) and $myVar) ? $myVar : 'rawr';发布于 2011-09-21 14:18:21
在PHP中,可以省略第二个参数:
echo $myVar ?: 'rawr';这可能最接近你想要的。
https://stackoverflow.com/questions/7501265
复制相似问题