PHP的SPL:涉及数组的接口是否涵盖所有数组属性?

时间:2008-09-28 06:49:13

标签: php arrays spl

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

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

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分: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 

答案 2 :(得分:3)

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