PHP的SPL:涉及数组的接口是否覆盖所有数组属性?
时间:2020-03-06 14:50:28 来源:igfitidea点击:
通过实现所有必要的SPL接口,可以编写与实际的PHP数组几乎没有区别的类吗?他们是否遗漏了一些至关重要的东西?
我想构建一个更高级的Array对象,但是我想确保如果我用自定义Array类代替它们,那么不会破坏在各处使用数组的现有应用程序。
解决方案
我能想到的唯一问题是gettype()和is_array()函数。
检查代码是否
gettype($FakeArray) == 'array' is_array($FakeArray)
因为尽管我们可以像使用数组一样使用对象,但仍将其标识为对象。
其他区别包括数组的" +"运算符(合并)和整个array_ *函数的故障,包括常用的array_merge和array_shift。
除了上述要点外,我们将无法使用户空间数组类型提示与类的实例一起使用。例如:
<?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