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 从逻辑上讲,该对象应该能够在任何可以使用数组的地方使用,因为它实现了与数组相同的接口. 我在逻辑中感到困惑,或者如果一个对象实现与数组相同的接口,它应该可以在所有相同的地方使用吗? 解决方法
数组是一种特殊的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可能生成的任何警告/错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |