PHP';s SPL:它涉及数组的接口是否覆盖了所有数组属性?
通过实现所有必要的SPL接口,是否可以编写一个实际上与实际PHP数组无法区分的类?他们是否遗漏了重要的内容PHP';s SPL:它涉及数组的接口是否覆盖了所有数组属性?,php,arrays,spl,Php,Arrays,Spl,通过实现所有必要的SPL接口,是否可以编写一个实际上与实际PHP数组无法区分的类?他们是否遗漏了重要的内容 我想构建一个更高级的数组对象,但我想确保,如果用自定义数组类替换数组,我不会破坏任何地方都使用数组的现有应用程序。我能想到的唯一问题是gettype()和is_Array()函数。 检查您的代码是否有错误 gettype($FakeArray) == 'array' is_array($FakeArray) 因为尽管可以像使用数组一样使用对象,但它仍然会被标识为对象 其他差异包括数组(
我想构建一个更高级的数组对象,但我想确保,如果用自定义数组类替换数组,我不会破坏任何地方都使用数组的现有应用程序。我能想到的唯一问题是gettype()和is_Array()函数。 检查您的代码是否有错误
gettype($FakeArray) == 'array'
is_array($FakeArray)
因为尽管可以像使用数组一样使用对象,但它仍然会被标识为对象 其他差异包括数组(合并)的“+”运算符和整个
数组*
功能的故障,包括常用的数组u合并
和数组u移位
以及上述要点,您将无法使用户空间数组类型提示与类的实例一起使用。例如:
<?php
function f(array $a) { /*...*/ }
$ao = new ArrayObject();
f($ao); //error
?>
即使这样,看起来我也可以使用override_function()函数来覆盖这些函数,以考虑其他情况。
Catchable fatal error: Argument 1 passed to f() must be an array, object given