SPL de PHP: ¿Sus interfaces que involucran matrices cubren todas las propiedades de la matriz?
Pregunta
¿Sería posible escribir una clase que sea prácticamente indistinguible de una matriz PHP real mediante la implementación de todas las interfaces SPL necesarias? ¿Les falta algo que sea crítico?
Me gustaría construir un objeto Array más avanzado, pero quiero asegurarme de no romper una aplicación existente que use matrices en todas partes si las sustituyo con una clase Array personalizada.
Solución
Los únicos problemas que se me ocurren son las funciones gettype () e is_array (). Verifique su código para
gettype($FakeArray) == 'array'
is_array($FakeArray)
Porque aunque puede usar el objeto como una matriz, todavía se identificará como un objeto.
Otros consejos
Además de los puntos mencionados anteriormente, no podrá hacer que las sugerencias de tipo de matriz de espacio de usuario funcionen con instancias de su clase. Por ejemplo:
<?php
function f(array $a) { /*...*/ }
$ao = new ArrayObject();
f($ao); //error
?>
Salida:
Catchable fatal error: Argument 1 passed to f() must be an array, object given
Otras diferencias incluyen el operador '+' para matrices (fusión) y el fallo de todas las funciones array_ *
, incluidas las comúnmente utilizadas array_merge
y array_shift
.