加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 将对象用作数组

发布时间:2020-12-13 17:02:34 所属栏目:PHP教程 来源:网络整理
导读:在最近对 PHP的更新中,他们在各种接口中添加了允许将对象视为数组,例如ArrayAccess,Iterator,Countable等. 我的问题是,那么以下内容应该有效吗? function useArray(array $array){ print_r($array);}useArray(new ArrayObj(array(1,2,3,4,5)); 截至目前,PHP
在最近对 PHP的更新中,他们在各种接口中添加了允许将对象视为数组,例如ArrayAccess,Iterator,Countable等.

我的问题是,那么以下内容应该有效吗?

function useArray(array $array)
{
    print_r($array);
}

useArray(new ArrayObj(array(1,2,3,4,5));

截至目前,PHP抛出了类型提示错误,因为$array在技术上不是一个数组.但是,它实现了所有接口,使其基本上与数组相同.

echo $array[0]; // 1
$array[0] = 2;
echo $array[0]; // 2

从逻辑上讲,该对象应该能够在任何可以使用数组的地方使用,因为它实现了与数组相同的接口.

我在逻辑中感到困惑,或者如果一个对象实现与数组相同的接口,它应该可以在所有相同的地方使用吗?

解决方法

Am I confused in my logic,or does it
makes sense that if an object
implements the same interface as an
array,it should be able to be used in
all the same places?

数组是一种特殊的PHP变量类型 – 不是对象 – 因此它不实现任何接口. ArrayObject是一个成熟的对象,它实现了许多接口(Countable,ArrayAccess等),并使某个对象在某些情况下就像一个数组(就像在foreach循环中一样).因此,虽然它们没有实现相同的接口,但它们有时表现相同.

理想的解决方案是PHP支持多个功能签名:

function useArray(array $array) { }
function useArray(ArrayObject $array) { }

但是直到我们得到它(如果我们得到它),你只需要检查函数定义之外的变量类型:

function useArray($array) {
 if (is_array($array) || $array instanceof ArrayObject) {
   // Do some stuff
 } else {
   throw new Exception('I require an array or an array-like structure!');
 }
}

或者尝试使用$array参数执行数组类型的东西,并处理useArray可能生成的任何警告/错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读