SPL vs. Array: Quando dovremmo usare SPL e quando dovremmo usare array in PHP?

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

  •  02-10-2019
  •  | 
  •  

Domanda

In Java e C ++, quando non conosciamo le dimensioni -. Matrice non usata come in PHP, invece usato LinkedList etc

In PHP esiste SPL, ma la maggior parte delle volte i programmatori usano array, perché (perché le persone non conoscono SPL)?

Quando dovremmo usare Array in PHP e whenSPL e qual è la differenza in questo caso tra PHP e Java / C ++?

È stato utile?

Soluzione

Ogni richiesta PHP deve inizializzare tutte le variabili e dopo la richiesta che vengono liberati. A causa di ciò, non viene spesso situazioni in cui le strutture di dati speciali (come maxheap, LinkedList o coda) sono più efficienti di array. Anche gli array sono molto più semplici da capire e da usare per principianti.

differenza di C ++ in PHP è che la lunghezza array è dinamico. È possibile aggiungere elementi ogni volta che vuoi.

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

è possibile creare in modo dinamico e aggiungere array ad un altro array

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

Questo creerà nuovo array, aggiungere elemento con il valore 5 e aggiungerlo come elemento di array $ arr.

$arr[][]=5;

array in PHP sono tabelle hash, in modo da avere non solo interi chiavi ma anche le stringhe:

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

Se elemento dell'array è intero allora ciascun elemento richiede una struttura di valori (zval) che richiede 16 byte. richiede anche un hash bucket - che richiede 36 byte. Che dà 52 byte per valore. intestazioni di allocazione di memoria prendere un altro 8 byte * 2 -. che dà 68 byte

A proposito di array in PHP: http://oreilly.com/catalog/progphp/ capitolo / ch05.html

Altri suggerimenti

Si sta chiedendo di confrontare due massicciamente le cose diverse, quasi l'unica somiglianza è che sono entrambi (array e la SPL) disponibili in PHP.

A tal fine, sarebbe essenzialmente privo di senso confrontare direttamente, o disporre, quando uno deve essere utilizzato sopra l'altro per i tempi quando entrambi potrebbero essere utilizzati per realizzare un compito. In tale nota, sia potrebbero essere utilizzati intrecciate. Per esempio, usando l'ArrayIterator ad iterare su un array, o ArrayObject a fare uso di sintassi di matrice stile quando si lavora con oggetti

Ti sembra anche essere confuso, o semplicemente poco chiaro, su ciò che lo SPL è; certamente non è limitato a strumenti utilizzati per iterare su collezioni di cose. Volevi chiedere parti specifiche della biblioteca, o sei forse solo poco chiaro cosa è disponibile in esso?

Usare matrici standard, è più veloce di ArrayObject.

Usa ArrayObject solo per implementare i propri array specificati con i vostri metodi personalizzati.

Non necessarilly una confusione forse, perché la gente può decidere di usare "SplStack" invece di matrice vaniglia associato con array_push / funzioni pop. Oppure utilizzare array in maniera classica,

e quindi esiste SplDoublyLinkedList, SplQueue, SplHeap. più ArrayObject.

Quindi la domanda è valida. E la risposta è:. Di fare lo stesso in un modo più javaish, ed è più lento

SPL in generale è un tentativo di standard di mimica e "off-the-shelf" classi e API, come esistono in C ++ e Java.

IMHO è arrivato troppo tardi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top