Php 在if语句表达式中设置变量

Php 在if语句表达式中设置变量,php,if-statement,Php,If Statement,今天我遇到了一些有趣的代码。我试图找出这是否是PHP的一个特性,或者我是否遗漏了什么,但在谷歌上找不到任何东西。可能是因为我不知道它的名字 代码 if($logo = \Repositories\Logo::getLogoData($id)){ $logo_href = $logo->link; } 变量$logo未在其他任何位置设置。这个if语句中的表达式似乎在检查this类方法是否返回任何内容,同时设置要在语句中使用的变量$logo 这是真的吗?如果是这样,这到底叫什么 您

今天我遇到了一些有趣的代码。我试图找出这是否是PHP的一个特性,或者我是否遗漏了什么,但在谷歌上找不到任何东西。可能是因为我不知道它的名字

代码

if($logo = \Repositories\Logo::getLogoData($id)){
     $logo_href = $logo->link;
}
变量
$logo
未在其他任何位置设置。这个if语句中的表达式似乎在检查this类方法是否返回任何内容,同时设置要在语句中使用的变量
$logo


这是真的吗?如果是这样,这到底叫什么

您可以在条件语句中进行类似的赋值。逻辑上,该值被分配给
$logo
,然后评估
$logo
是否真实。如果是真的,则执行条件中的代码


在循环数据库结果集的情况下,您经常会看到这种赋值/求值,但通常我建议,为了阅读g代码的清晰性,应该避免在这种常见用例之外进行赋值/求值。

是的,这是一个特性。就像:

$a=$b=5

但在这种情况下,假设if的布尔结果为var$a


然而,IDE经常抱怨这样的解决方案,因为==vs.=是一个非常常见的错误源。

它首先赋值,然后计算赋值的返回值,即赋值结果。这是我的想法,但我似乎找不到任何关于它的正式文档。有名字吗?我想读一下关于它的文档。@ChrisB:这就是赋值运算符的工作原理。它返回指定的值。博士:@RocketHazmat我想我只是不知道你可以在if语句中这样做expression@ChrisB:
=
只是一个操作符,就像
+
*
一样。它可以在很多地方使用:-)@ChrisB通常,在这样的条件中使用赋值运算符应该是不受欢迎的(至少在IMO中是这样)。然而,也有少数情况,如循环通过长度未知的结果集,这是有意义的,例如:
while($row=$db_result->fetch(){…}
。但在这种情况下,我更倾向于将赋值放在条件之前的单独代码行上。我认为这样做代码可读性更强,更不容易出错。