【问题标题】:Is casting to array in a foreach considered a bad practise?在 foreach 中强制转换为数组是否被认为是一种不好的做法?
【发布时间】:2017-07-28 19:32:51
【问题描述】:

在启动 foreach 循环时强制转换为数组是否被认为是一种不好的做法。像这样的:

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

这样可以防止

为 foreach() 提供的参数无效

从发生。

或者最好先检查它是否是一个数组:

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

【问题讨论】:

  • 一个 Iterable 对象,例如 Collection 或 Generator,可以使用 foreach() 循环,但将返回 false 以获取 is_array().... 更好地通过其他方式检查
  • 有什么我们应该知道的上下文吗?如果不是数组,您是否期望任意类型,包括 Traversable 接口的实现?或者你只是想例如检测您的数据集何时为空?这是否是不好的做法在很大程度上取决于这一点。一般来说,对内部变量可以容纳什么一无所知可能是设计问题的征兆,可能应该在其他地方解决。

标签: php arrays foreach casting


【解决方案1】:

有时您不能将变量强制转换为数组。所以你最好检查它是否是可迭代的。您可以使用此代码检查变量在 foreach 中是否可遍历或可用:

   if( !is_array( $examples ) && !$examples instanceof Traversable )

【讨论】:

  • 我不知道doewvote的原因,你会显示它。
  • 对我来说似乎是个不错的方法。在哪种情况下,变量将无法转换为数组?如果我 100% 确定变量是数组还是字符串怎么办?在检查它是否是Traversable 的实例时,is_array 也是必需的
猜你喜欢
  • 2015-10-29
  • 2017-12-18
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 2022-12-22
  • 2018-01-25
相关资源
最近更新 更多