PHP 7.1添加了新的is_iterable函数来检查变量是否可以迭代。但是,尽管您可以遍历对象属性is_iterable
为它们返回false。为什么对象被认为不可迭代,虽然他们实际上是?
这似乎是故意的,因为它被记录在案,我无法找到任何有关这个问题的PHP错误,但我不知道为什么这样做?
<?php
$a = new stdClass();
$a->foo = 'bar';
var_dump(is_iterable($a));
foreach ($a as $key => $value) {
var_dump($key, $value);
}
输出
boolean false
string 'foo' (length=3)
string 'bar' (length=3)
但我期待它输出
boolean true
string 'foo' (length=3)
string 'bar' (length=3)
有关PHP相关答案的正确答案...... meh¯\\ _(ツ)_ /¯。 – deceze
*如果您自己不这样做,则对象不会实现Traversable *和*这是一个内部引擎接口,无法在PHP脚本中实现。*来自http://php.net/manual/en/class.traversable .PHP。僵局? –
@Alex下一句:*“必须使用'IteratorAggregate'或'Iterator'。*(注意:这两个都是'Traversable'的子类...) – deceze