三元运算符的不良做法

时间:2011-04-02 12:31:45

标签: php arrays coding-style foreach loops

在编写PHP时,我需要迭代一个也可以返回null的函数调用,所以我使用了以下结构:

foreach (($object->method() ? : array()) as $thing)
{
    // Insert code here
}

我的项目经理不喜欢这种做法,并坚持要写一些更冗长的内容。我理解他的观点,但如果由我来决定,我会保持原样。别人怎么看待这种做法?

3 个答案:

答案 0 :(得分:3)

您是否有权修改method()?看起来首选的解决方案是让它返回一个空数组而不是null

修改

如果那是不可能的,我认为你应该像项目经理建议的那样做,或者如果使用三元运算符就可以在团队中做出决定。我不是一个php程序员,我对空true分支的语义感到有点困惑。

围绕foreach循环的is_null()包装器的替代方法可以是围绕method()的明确命名的包装函数,如果method()为空,则返回空数组。

答案 1 :(得分:2)

这完全是cromulent。虽然这将导致PHP 5.3依赖,但它很短并且仍然可读。我猜他在foreach中出现了异常,复杂的表达在某种程度上并不常见,因此不赞成。

无论如何,我有时会在那里使用强制转换,这对于参数灵活性(将单个字符串视为数组)非常有用,但不确定在这种情况下是否真的“更好”

 foreach ( (array)$object->method() as $xy )
 {

显然,只有在方法不返回任何内容(NULL)时才有效。如果你可以帮助它,那么让方法本身返回一个空数组(就像布尔值false一样)。

答案 2 :(得分:0)

我猜测经理很可能反对使用三元运算符,因为它们可能更难阅读。当浏览代码进行更新时,或者当代码被另一个程序员审查时,意图通常不会立即明显。

另外,在PHP 6中,三元运算符从?:更改为?? ::,这意味着如果您编程的平台将升级到PHP6,则需要重新编码该行。