Iterable objects and array type hinting?(可迭代对象和数组类型提示?)
问题描述
我有很多函数,它们要么具有数组类型提示,要么使用 is_array()
来检查变量的数组特性.
I have a lot of functions that either have type hinting for arrays or use is_array()
to check the array-ness of a variable.
现在我开始使用可迭代的对象.它们实现 Iterator
或 IteratorAggregate
.如果它们通过类型提示或经过 is_array()
,它们会被作为数组接受吗?
Now I'm starting to use objects that are iterable. They implement Iterator
or IteratorAggregate
. Will these be accepted as arrays if they pass through type hinting, or undergo is_array()
?
如果我必须修改我的代码,是否有一种通用的 is_iterable()
,或者我必须这样做:
If I have to modify my code, is there a generic sort of is_iterable()
, or must I do something like:
if ( is_array($var) OR $var instance_of Iterable OR $var instanceof IteratorAggregate ) { ... }
还有哪些其他可迭代的接口?
What other iterable interfaces are out there?
推荐答案
我想你的意思是 instanceof Iterator
,PHP 没有 Iterable
接口.它确实有一个 Traversable
接口.Iterator
和 IteratorAggregate
都扩展了 Traversable
(并且 AFAIK 他们是唯一这样做的).
I think you mean instanceof Iterator
, PHP doesn't have an Iterable
interface. It does have a Traversable
interface though. Iterator
and IteratorAggregate
both extend Traversable
(and AFAIK they are the only ones to do so).
但是不,实现 Traversable
的对象不会通过 is_array()
检查,也没有内置的 is_iterable()
功能.您可以使用的支票是
But no, objects implementing Traversable
won't pass the is_array()
check, nor there is a built-in is_iterable()
function. A check you could use is
function is_iterable($var) {
return (is_array($var) || $var instanceof Traversable);
}
需要明确的是,所有 php 对象都可以用foreach 进行迭代,但只有一些 实现了Traversable
.因此,提供的 is_iterable
函数不会检测到 foreach 可以处理的所有内容.
To be clear, all php objects can be iterated with foreach, but only some of them implement Traversable
. The presented is_iterable
function will therefore not detect all things that foreach can handle.
这篇关于可迭代对象和数组类型提示?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:可迭代对象和数组类型提示?
基础教程推荐
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01