代码之家  ›  专栏  ›  技术社区  ›  DuoSRX

条件转让

php
  •  5
  • DuoSRX  · 技术社区  · 15 年前

    最近我看到了很多这样的代码:

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

    这种做法是好是坏?

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

    可能的意外分配, 条件中的赋值应为 避免

    你怎么认为?

    4 回复  |  直到 12 年前
        1
  •  4
  •   Rob Wilkerson    15 年前

    这是一个有用的工具,我不得不承认有时使用它来避免额外的任务。一方面,这可能是一些不好的做法,因为:

    • 在其他通用语言中,它不是一个可用的习语
    • 它不太可读

    另一方面:

    • 隐式布尔转换在其他语言中不会发生,但它们广泛依赖于它们存在的位置。相反,条件赋值操作符存在于Ruby和JavaScript中(作为示例),但不存在于PHP中。我们应该将语言结构的使用限制在所有类似语言中的使用吗?大概不会。
    • 谁看不懂?

    我应该注意到,我确实试图避免它,因为我发现它在大多数情况下不太可读,但这纯粹是我个人的偏好。在我发现它有用的地方,我就用它。

        2
  •  4
  •   jlindenbaum    15 年前

    这是一种容易出错的方法,但在PHP中是常见的做法。尤其是在目录遍历这样的情况下 while (($dir = readdir($handle)) !== FALSE)

    如果你能避免的话。避开它。

        3
  •  4
  •   Bitcoin Clock    13 年前

    我一直用这种句法…我发现它100%可读,因为我已经习惯了看到这种线条。在我看来,为分配额外的代码行是浪费空间。

        4
  •  2
  •   Jonathan Hickman    15 年前

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