2010-05-14 69 views
5

我最近看到了很多这样的代码:分配的条件语句

if ($foo = $bar->getFoo()) 
{ 
    baz($foo); 
} 

这被认为是好还是不好的做法?

例如,NetBeans IDE中发出通知,如果你使用这种代码:

可能意外分配,在条件 任务应该是 避免

你觉得呢?

+0

你的意思是if($ foo == $ bar-> getFoo())? – 2010-05-14 14:38:48

+8

没关系:) – DuoSRX 2010-05-14 14:39:29

+0

这显然飞过了我的头:)所以条件是检查$ bar-> getFoo()不会导致错误?是对的吗? – 2010-05-14 14:47:33

回答

4

这是一个有用的工具,我不得不承认偶尔使用它来避免额外的作业。在一方面,它可能是由不好的做法,有些是因为:

  • 这不是在其他共同语言可用成语
  • 它的可读性

在另一方面:

  • 隐式布尔转换不会在其他语言中发生,但它们广泛地计入它们确实存在的位置。相反,有条件的赋值操作符存在于Ruby和Javascript中(作为例子),但不在PHP中。我们是否应该将语言结构的使用仅限于所有类似语言中的语言结构?可能不会。
  • 对谁而言不太可读?

我应该注意,我尽量避免它,因为我发现它在大多数时候都不太可读,但它纯粹是个人偏好。我发现它很有用,我使用它。

4

这是一种容易出错的方法,但这是PHP中的常见做法。特别是在目录遍历等事情中,你正在做的事情如while (($dir = readdir($handle)) !== FALSE)

如果你可以避免它。躲开它。

+0

'!== FALSE'是多余的,但是使得语句更易于理解。但为什么不使用'== TRUE'?它更简单! – T30 2016-01-14 13:10:12

+1

如果目录为空,则readdir返回FALSE。否则,它将返回目录中的下一个项目。你必须检查是否为假,以继续阅读。它应该做一个三重平等的严格类型检查。 – jlindenbaum 2016-01-16 15:55:03

2

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

+1

+1这是C日剩余的,这是常见(不好)的做法。很多人仍然这样做,因为他们认为这使他们[看起来很聪明](http://stackoverflow.com/questions/2101875/what-are-some-programming-questions-or-mistakes-you-get-wrong-只是,随你-GET-b/2151844#2151844)。 – 2010-05-14 18:08:16

4

我一直使用这个语法......我发现它100%可读,因为我很习惯看到这种线。为这项任务添加额外的代码行看起来像是浪费空间给我。

+1

代码是要读取的。如果额外的一行代码增加了可读性 - >添加一行。我不想继承你的缩小的代码。 – 2016-08-05 14:30:52