也许如果我不知道smth,但这个有用:
$city = City::find(1);
$city->visible = 0;
这不是:
if ($city->visible = 0) {
}
这有效
if ($city->visible = ***) {
}
// where *** - number, except 0 / letter
为什么呢?它会返回假吗?
我的坏:认为它会为对象中的变量赋值。
答案 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){}
注意==进行比较:?