2010-07-02 22 views
6

En Java y C++ cuando no conocemos el tamaño - array no utilizado como en PHP, en su lugar se usa linkedList etc.SPL vs. Array: ¿Cuándo deberíamos usar SPL y cuándo debemos usar Array en PHP?

En PHP existe SPL, pero la mayoría de las veces los programadores usan array, porque (porque la gente no no sé sobre SPL)?

Cuando deberíamos usar Array en PHP y whenSPL y cuál es la diferencia en este caso entre PHP y Java/C++?

+0

Relacionado: [¿Cuáles son los beneficios de usar SPL ArrayObject, ArrayIterator, RecursiveArrayIterator en lugar de arreglos regulares?] (Http://stackoverflow.com/questions/4072927/what-are-the-benefits-of-using-spl -arrayobject-arrayrerator-recursivearrayite) (nov 2010); [Beneficios de la interfaz ArrayAccess en PHP?] (Http://stackoverflow.com/q/4319603/367456) (Nov 2010) – hakre

Respuesta

2

Cada solicitud de PHP debe inicializar todas las variables y después de la solicitud se liberan. Debido a eso, a menudo no vienen situaciones donde las estructuras de datos especiales (como maxheap, linkedlist o queue) son más eficientes que array. También las matrices son mucho más simples de entender y usar para principiantes.

La diferencia de C++ en PHP es que la longitud de las matrices es dinámica. Puede agregar elementos cuando lo desee.

$arr=array(); 
$arr[]=5; //add integer to array 
echo count($arr); //1 
$arr[]=7; 
echo count($arr); //2 

puede crear de forma dinámica y añadir variedad a otra matriz

$arr[]=array(); 
$arr[2][]=5; 
echo count($arr); //3 
echo count($arr[2]); //1 

Esto creará nueva matriz, añadir elementos con valor de 5 y agregarlo como elemento de array $ arr.

$arr[][]=5; 

En las matrices de PHP son tablas hash, lo que puede tener no solamente las teclas de números enteros sino también cadenas:

$arr['somekey']='somevalue'; 

Si elemento de la matriz es entero, entonces cada elemento requiere una estructura de valores (zval) que tiene 16 bytes. También requiere un cubo de hash, que requiere 36 bytes. Eso da 52 bytes por valor. Los encabezados de asignación de memoria toman otros 8 bytes * 2, lo que da 68 bytes.

Acerca de las matrices en PHP: http://oreilly.com/catalog/progphp/chapter/ch05.html

+0

dnamic php array significa que cada vez que ese nuevo elemento insertado crea una nueva matriz. O por ejemplo array php tiene un tamaño predeterminado como 100 celdas y aumenta si array necesita más de 100 celdas multiplicando 2 etc. – Yosef

+0

Cada vez que se crea un nuevo elemento, se asigna nueva memoria para la variable y se asigna nueva memoria para el hash. – codez

1

Utilice matrices estándar, es más rápido que ArrayObject.

Utilice ArrayObject solo para implementar sus propias matrices especificadas con sus métodos personalizados.

+4

¿Por qué "siempre es más lento" tienen que ser los primeros argumentos en contra de algo? – salathe

+1

http://www.php.net/manual/pt_BR/class.arrayobject.php#90371 consulte este comentario para el índice de referencia. El rendimiento es un parámetro muy importante en aplicaciones pesadas, lo siento. – silent

2

que nos estás pidiendo que compare dos masivamente cosas diferentes, casi la única similitud es que ambos son (arrays y el SPL) disponibles en PHP.

Para ese fin, sería esencialmente absurdo comparar directamente, o prescribir, cuándo se debe usar uno sobre el otro para los tiempos en que ambos podrían utilizarse para realizar una tarea. En esa nota, ambos se pueden usar entrelazados: por ejemplo, usando ArrayIterator para iterar sobre una matriz, o ArrayObject para hacer uso de la sintaxis de estilo de matriz cuando se trabaja con objetos.

Parece que también está confundido, o no está claro, sobre qué es el SPL; Ciertamente, no está restringido a las herramientas utilizadas para iterar sobre colecciones de cosas. ¿Quiso preguntar acerca de partes específicas de la biblioteca, o simplemente no está claro qué hay disponible en ella?

+0

Creo que bit confuce avout SPL – Yosef

0

No necesariamente puede ser una confusión, porque la gente puede decidir usar "SplStack" en lugar de vainilla array asociado con las funciones array_push/pop.O utilice matrices de manera clásica,

y luego existen SplDoublyLinkedList, SplQueue, SplHeap. más ArrayObject.

Entonces la pregunta es válida. Y la respuesta es: haces lo mismo de una manera más java, y es más lento.

SPL en general es una tentativa para imitar estándar & clases "off-the-shelf" & API, como existen en C++ & Java.

En mi humilde opinión llegó demasiado tarde.

Cuestiones relacionadas