6

是否可以通过实现所有必要的 SPL 接口来编写一个与实际 PHP 数组几乎无法区分的类?他们是否遗漏了任何重要的东西?

我想构建一个更高级的 Array 对象,但我想确保如果我用自定义 Array 类替换它们,我不会破坏到处使用数组的现有应用程序。

4

3 回答 3

7

我能想到的唯一问题是 gettype() 和 is_array() 函数。检查您的代码

gettype($FakeArray) == 'array' 
is_array($FakeArray)

因为虽然您可以像使用数组一样使用对象,但它仍然会被识别为对象。

于 2008-09-28T07:38:55.010 回答
4

除了上述几点之外,您将无法使用户空间数组类型提示与您的类的实例一起使用。例如:

<?php
function f(array $a) { /*...*/ }

$ao = new ArrayObject();
f($ao); //error
?>

输出:

Catchable fatal error: Argument 1 passed to f() must be an array, object given 
于 2008-09-29T12:43:40.277 回答
3

其他差异包括数组的“+”运算符(合并)和整个array_*函数的失败,包括常用的array_mergeand array_shift

于 2008-09-28T10:11:16.280 回答