Php 条件赋值

Php 条件赋值,php,Php,我最近看到了很多此类代码: if ($foo = $bar->getFoo()) { baz($foo); } 这被认为是好的还是坏的做法 例如,如果您使用此类代码,IDE会发出通知: 可能的意外任务, 有条件的作业应 避免 你怎么看?这是一种容易让错误潜入的方法,但在PHP中这是常见的做法。尤其是在诸如目录遍历之类的过程中,您正在执行while(($dir=readdir($handle))!==FALSE) 如果你能避免的话。避免使用它。虽然这是有效的语法,结果会如预期的那样

我最近看到了很多此类代码:

if ($foo = $bar->getFoo())
{
    baz($foo);
}
这被认为是好的还是坏的做法

例如,如果您使用此类代码,IDE会发出通知:

可能的意外任务, 有条件的作业应 避免


你怎么看?

这是一种容易让错误潜入的方法,但在PHP中这是常见的做法。尤其是在诸如目录遍历之类的过程中,您正在执行
while(($dir=readdir($handle))!==FALSE)


如果你能避免的话。避免使用它。

虽然这是有效的语法,结果会如预期的那样,但这是一个坏习惯。可读性不足,可能会养成一个坏习惯,即当你的意思是==,你的眼睛会一直回到这一行,当你试图在应用程序中找到真正的bug时。我不会用这种写作风格。在这种情况下,只需获取返回值,然后验证返回值。。。或者更好的方法是,使用异常处理来避免陷入大量if语句的泥潭。

我不得不承认,这是一个有用的工具,有时我会使用它来避免为赋值增加一行。一方面,这可能是一些人的坏习惯,因为:

  • 在其他通用语言中,这不是一个可用的习语
  • 它的可读性较差
另一方面:

  • 隐式布尔转换在其他语言中不存在,但它们广泛依赖于它们存在的地方。相反,条件赋值运算符存在于Ruby和Javascript中(作为示例),但不存在于PHP中。我们是否应该将语言结构的使用限制在所有类似语言中?可能不会
  • 谁看不懂

我应该注意到,我确实尽量避免使用它,因为我发现它在大多数情况下可读性较差,但这纯粹是我个人的偏好。在我觉得有用的地方,我就使用它。

我一直使用这种语法。。。我觉得它100%可读,因为我已经习惯了看到这种线条。对我来说,有一行额外的代码用于分配看起来像是在浪费空间。

你的意思是如果($foo==$bar->getFoo())?不,这是重点:)这显然超出了我的理解:)那么条件是检查$bar->getFoo()是否不会导致错误?是吗?是的。它首先将$bar->getFoo()的值赋给$foo,然后计算$foo是真还是假。当然,在我看来,这很容易出错,因为很容易将赋值运算符误认为比较运算符。i、 e=和==上述注释说明了为什么应该避免这种情况。+1这是C天的遗留问题,在C天中,这是常见的(不好的)做法。很多人仍然这样做,因为他们认为这会让他们成功。
!==FALSE
是多余的,但会使语句更容易理解。但是为什么不使用
==TRUE
?它甚至更简单!如果目录为空,readdir返回FALSE。否则,它将返回目录中的下一项。你必须检查没有错误才能继续阅读。它应该使用三重相等进行严格的类型检查。代码是用来读取的。如果额外的代码行增加可读性->添加一行。我不想继承你的精简代码。