在编写PHP时,我需要迭代一个也可以返回null
的函数调用,所以我使用了以下结构:
foreach (($object->method() ? : array()) as $thing)
{
// Insert code here
}
我的项目经理不喜欢这种做法,并坚持要写一些更冗长的内容。我理解他的观点,但如果由我来决定,我会保持原样。别人怎么看待这种做法?
答案 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,则需要重新编码该行。