在foreach循环中转换为数组是否被认为是一种不良实践?

3

在初始化foreach循环时,强制转换为数组被认为是一种不好的做法。类似这样:

foreach ((array) $examples as $example) {
    // Do stuff
}

这可以防止出现

为 foreach() 提供了无效参数

的错误。

或者,先检查它是否是一个数组,这样做是否更好呢:

if ( is_array($examples) ) { 
    // Do the loop 
}

2
一个可迭代对象,比如集合或生成器,可以使用 foreach() 进行循环,但是对于 is_array() 将返回 false.... 最好通过其他方式进行检查。 - Mark Baker
有任何我们需要了解的背景吗?当不是数组时,您是否期望任何任意类型,包括“可遍历”接口的实现?或者您只想检测数据集为空时,例如?是否是不好的实践取决于这一点。一般而言,完全不知道内部变量可以保持什么可能是设计问题的症状,可能应该在其他地方解决。 - Álvaro González
1个回答

0
有时候你不能将一个变量转换成数组。所以最好先检查它是否可迭代。你可以使用以下代码来检查变量是否可遍历或在 foreach 中使用:
   if( !is_array( $examples ) && !$examples instanceof Traversable )

我不知道downvote的原因,你能展示一下吗? - LF00
1
对我来说这似乎是个不错的方法。在什么情况下变量无法强制转换为数组?如果我百分之百确定变量要么是数组要么是字符串呢?此外,在检查是否为Traversable实例时,是否需要使用is_array - Melvin Koopmans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接