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

Chr*_*ier 20 php if-statement

我今天遇到了一些有趣的代码.我试图找出这是PHP的一个功能,还是我错过了什么,但无法在Google上找到任何内容.可能是因为我不知道它的名字.

if($logo = \Repositories\Logo::getLogoData($id)){
     $logo_href = $logo->link;
}
Run Code Online (Sandbox Code Playgroud)

该变量$logo未在其他任何位置设置.看起来这个if语句中的表达式正在检查该类方法是否返回任何内容并同时设置$logo要在语句中使用的变量.

这是真的?如果是这样,世界上有什么叫做!?!

Mik*_*ant 23

您可以在条件中进行类似的任务.逻辑上发生的是,该值被赋值$logo,然后$logo评估它是否真实.如果它是真实的,条件中的代码执行.

在循环访问数据库结果集的情况下,您经常会看到这种分配/评估,但通常我建议在读取g代码时为了清楚起见,应避免在这种常见用例之外.

  • @ChrisB:这就是赋值运算符的工作原理。它返回指定的值。文档:http://php.net/manual/en/language.operators.assignment.php (2认同)
  • @ChrisB 一般来说,在这样的条件下使用赋值运算符应该是不受欢迎的(至少是 IMO)。然而,在少数情况下,例如遍历未知长度的结果集是有意义的,例如:`while($row = $db_result->fetch(){ ... }`。但在这种情况下,我的首选将分配放在条件之前的单独代码行中。我认为这样的代码更具可读性并且不易出错。 (2认同)