2008-08-05 39 views
22

我想设置一个标志来显示或隐藏一个页面元素,但即使表达式为false,它也会始终显示。为什么我的三元表达式不起作用?

$canMerge = ($condition1 && $condition2) ? 'true' : 'false'; 
... 
<?php if ($canMerge) { ?>Stuff<?php } ?> 

这是怎么回事?

回答

38

这被打破,因为作为字符串的'false'将作为布尔值计算为true。

但是,这是一个不需要的三元表达式,因为结果值是简单的真和假。这将是等效的:

$canMerge = ($condition1 && $condition2); 
2

'false'的值为真。您需要删除引号:

$canMerge = ($condition1 && $condition2) ? true : false; 
+1

这所以似乎是一个信誉耕作的尝试。一个3k-rep用户谁不能区分一个字符串和一个布尔值,他在一分钟后回答他的问题? – moo 2009-01-24 03:26:35

+3

感谢您的意见奥兰多和埃德。这是一个引起我注意的问题,我将它发布给我和其他人的好处。根据常见问题回答自己的问题是完美的。也许你应该再读一遍,如果它已经有一段时间了...... – Polsonby 2009-06-12 21:11:47

0

对我来说似乎是一个合理的问题,尤其是因为PHP的工作方式的差异。

例如,下面的代码将输出 '的假'

$a = '0'; 

if($a) 
{ 
    echo 'its true'; 
} 
else 
{ 
    echo 'its false'; 
} 
-1
$canMerge = ($condition1 && $condition2); 

然后

if ($canMerge){ 
    echo "Stuff"; 
} 
相关问题