Php逻辑表达式和对象

Php逻辑表达式和对象,php,object,logic,Php,Object,Logic,我有点奇怪 代码1: if($city = Cities::find_by_id($city_id)) { var_dump($city); } 返回:object(Cities)#6(7){…},普通 代码2: if($city = Cities::find_by_id($city_id) && $building = Buildings::find_by_id($building_id)) { var_dump($city); } 这将返回:bool(tr

我有点奇怪

代码1:

if($city = Cities::find_by_id($city_id)) {
  var_dump($city);
}
返回:object(Cities)#6(7){…},普通

代码2:

if($city = Cities::find_by_id($city_id) && $building = Buildings::find_by_id($building_id)) {
      var_dump($city);
}
这将返回:bool(true),我期望得到与之前一样的结果


有人能给我解释一下发生了什么吗?

这里发生的是,在第一种情况下,您只是将函数返回值赋给变量$city

$city = Cities::find_by_id($city_id)
结果和你们期望的差不多。对于第二种情况,您正在做一些不同的事情-您正在分配

Cities::find_by_id($city_id) && $building = Buildings::find_by_id($building_id)
对于变量$city,这意味着如果Cities::find_by_id和Buildings::find_by_id都返回stdObjects,则应用逻辑运算符

有点像:

$city = (object) && (object)
这和

$city = true && true
您可能希望执行类似操作(请参见附加括号):


$var=Object
将Object赋值给
$var
,但
$var=Object&&Object
将布尔值赋值给
Object&&Object
if(($city = Cities::find_by_id($city_id)) && ($building = Buildings::find_by_id($building_id))) {
  var_dump($city);
}