2012-07-07 17 views
19

Estoy examinando la biblioteca PHP estándar (SPL). Solo utilicé arreglos antes y ahora descubrí que PHP tiene muchas clases estándar. Pero no hay palabras en el manual si se recomienda usarlo o no. Por ejemplo, explícitamente recomiendan usar la construcción foreach para iterar matrices porque es más rápido. ¿Y qué hay de esta biblioteca? Si necesito almacenar algunos datos en un objeto, ¿debería usar alguna clase concreta de SPL para mi situación o usar arreglos estándar es mejor de todos modos?PHP SPL, ¿vale la pena usarlo o las funciones de matriz sin formato son mejores?

+1

Si almacena datos en un objeto, puede iterar sobre el objeto implementando ArrayAccess o ArrayIterator, pero los datos subyacentes aún se almacenan en una matriz de PHP simple. Los arrays regulares están bien, si desea almacenar datos en un objeto, implemente uno de los [iteradores] (http://www.php.net/manual/en/spl.iterators.php) a su discreción. – drew010

Respuesta

28

Hay mucho para su pregunta. ¿Deberías usar las estructuras de datos SPL? Depende.

La matriz de PHP puede actuar como un mapa, una lista vinculada o una matriz. En muy pocas ocasiones, de hecho, desea un solo tipo de datos que actúe como todas esas cosas al mismo tiempo, por lo que la naturaleza enfocada de los tipos de datos SPL no es tan limitante. De hecho, la mayoría de los "outsiders" (y algunos "insiders") considerarían la matriz de PHP una parodia.

El principal inconveniente de la matriz de PHP es que utiliza mucha memoria. Incluso si solo quiere una matriz fija, secuencial e indexada, tiene la sobrecarga de las cosas que están vinculadas entre sí y el almacenamiento de las claves. A pesar de eso, la matriz de PHP suele ser mucho más rápida que los tipos de objetos si usted está agregando datos e iterando sobre ellos, probablemente porque las llamadas a las funciones disminuyen la velocidad.

En general, no veo mucha gente que use las estructuras de datos SPL. Sobre todo, creo, porque en el contexto de PHP y las aplicaciones web, en general no son muy aplicables. Por lo general, se trata de matrices pequeñas, donde la conveniencia de los operadores integrados y las funciones de matriz superan cualquier ventaja de los tipos de SPL.

Eso dijo:

  • Si usted se encuentra en una situación en la que está utilizando una matriz como una lista enlazada (insertar/eliminar en el medio), a continuación, pruebe uno de los SPL lista doblemente enlazada.

  • Si se encuentra utilizando una gran matriz indexada, intente con SPLFixedArray. Definitivamente consumirán mucha menos memoria.

  • Si necesita tener un mapa con objetos como la clave, utilice un SplObjectStorage (ya que la matriz de PHP no funciona con las teclas de objeto).

  • Si desea mantener los datos ordenados en una matriz, pruebe uno de los montones.

referencia la matriz nativa vs el objeto SPL y usar en cada uno tiene la memoria de velocidad + + compensación simplicidad que más le convenga.

+1

+1, pero diré por mí, siempre me inclino por las matrices nativas de php simplemente porque tienen una excelente integración de idiomas y funcionan con todas las maravillosas funciones de arreglos de php. spl a menudo se siente como un inadaptado en php. – goat

+0

Acepto que estas estructuras de datos tienden a sobresalir como un pulgar dolorido. Por lo general, solo los utilizo cuando estoy machacando muchos datos (y aun así, PHP no es mi primera elección de un idioma) o cuando necesito pasar arreglos por referencia. – Matthew