SPL de PHP: ¿Sus interfaces que involucran matrices cubren todas las propiedades de la matriz?

StackOverflow https://stackoverflow.com/questions/145376

  •  02-07-2019
  •  | 
  •  

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.

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top