不能在php的IF子句中将列值设置为0(零)

时间:2014-04-09 18:13:52

标签: php variable-assignment zero

也许如果我不知道smth,但这个有用:

$city = City::find(1);
$city->visible = 0;

这不是:

if ($city->visible = 0) {
}

这有效

if ($city->visible = ***) {
}
// where *** - number, except 0 / letter

为什么呢?它会返回假吗?

我的坏:认为它会为对象中的变量赋值。

4 个答案:

答案 0 :(得分:2)

这是一个表达式

$city->visible = 0

评估为0.因此,您实际上是在写

if (0) { ... }

0是PHP中的假值,因此永远不会调用IF块


将其与

进行比较
$city->visible = 1

评估为

if (1) { ... }

1是PHP中的真值,因此块 将被称为


根据您的评论,请参阅

$a = 1;      // this silently evaluates to 1; no visible output
echo $a = 0; // 0
echo $a;     // 0

答案 1 :(得分:1)

PHP的基本规则:赋值操作的返回值是指定的值。

所以当你这样做时

if ($foo = 0) {
}

PHP会将0分配给$foo,然后将0返回到if()测试。由于0是假值,因此if()测试失败,并且其中的任何代码都不会被执行。

这是允许

的完全相同的机制
$foo = $bar = $baz = 42;

上班。正确评估/执行分配 - > left,每个变量的值都为42

答案 2 :(得分:1)

此:

if ($city->visible = 0) {}

相当于:

$city->visible = 0;
if( $city->visible ) {}

相当于:

if( 0 ) {}

当然等同于:

if ( false ) {
  // code that will never, under any circumstances, run. ever.
}

答案 3 :(得分:0)

  

if($ city-> visible == 0){}

注意==进行比较:?