2010-07-02 16 views
6

In Java und C++, wenn wir nicht die Größe kennen - Array nicht verwendet wie in PHP, stattdessen verwendet LinkedList etc.SPL vs. Array: Wann sollten wir SPL verwenden und wann sollten wir Array in PHP verwenden?

In PHP existieren SPL, aber die meisten Male Programmierer Array verwenden, warum (weil die Leute nicht weiß nicht über SPL)?

Wann sollten wir Array in PHP und whenSPL verwenden und was ist der Unterschied in diesem Fall zwischen PHP und Java/C++?

+0

Verwandte: [? Was sind die Vorteile der Verwendung von SPL Arrayobject, ArrayIterator, RecursiveArrayIterator statt regulären Arrays] (http://stackoverflow.com/questions/4072927/what-are-the-benefits-of-using-spl -arrayobject-arrayiterator-recursivearrayite (Nov 2010); [Vorteile von Arrayaccess-Schnittstelle in PHP?] (Http://stackoverflow.com/q/4319603/367456) (Nov 2010) – hakre

Antwort

2

Jede PHP-Anfrage muss alle Variablen initialisieren und nach der Anfrage werden sie freigegeben. Aus diesem Grund kommt es nicht oft zu Situationen, in denen spezielle Datenstrukturen (wie MaxHeap, LinkedList oder Queue) effizienter sind als Array. Auch Arrays sind viel einfacher zu verstehen und für Anfänger zu verwenden.

Der Unterschied zu C++ in PHP ist, dass die Länge der Arrays dynamisch ist. Sie können Elemente hinzufügen, wann immer Sie möchten.

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

können Sie dynamisch erstellen und fügen Sie Array zu einem anderen Array

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

Dies wird neue Array erstellen, fügen Element mit dem Wert 5 und fügen Sie es als Element Array $ arr.

$arr[][]=5; 

In PHP-Arrays sind Hash-Tabellen, so kann man nicht nur die Tasten integer haben, sondern auch Zeichenketten:

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

Wenn Integer-Array-Element wird dann jedes Element einen Wert Struktur erfordert (zval), die statt 16 Bytes. Benötigt außerdem einen Hash-Bucket - der 36 Bytes benötigt. Das ergibt 52 Bytes pro Wert. Speicherzuweisungsheader nehmen weitere 8 Bytes * 2 - was 68 Bytes ergibt.

Über Arrays in PHP: http://oreilly.com/catalog/progphp/chapter/ch05.html

+0

Dynamic PHP-Array bedeutet, dass jedes Mal, dass neues Element eingefügt neue Array erstellt. Oder zum Beispiel PHP-Array haben Standardgröße wie 100 Zellen und sie erhöhen, wenn Array durch Multiplikation 2 usw. mehr als 100 Zellen benötigen .. ?? – Yosef

+0

Jedes Mal, wenn ein neues Element erstellt wird, wird neuer Speicher für die Variable zugewiesen und neuer Speicher für den Hash zugewiesen. – codez

1

Verwenden Sie Standard-Arrays, es ist schneller als ArrayObject.

Verwenden Sie ArrayObject nur, um Ihre eigenen angegebenen Arrays mit Ihren benutzerdefinierten Methoden zu implementieren.

+4

Warum „es ist langsamer“ hat immer die ersten Argumente gegen etwas sein? – salathe

+1

http://www.php.net/manual/pt_BR/class.arrayobject.php#90371 überprüfen diesen Kommentar für Benchmark. Leistung ist ein sehr wichtiger Parameter in der schweren Anwendung, Entschuldigung. – silent

2

Sie fragen uns zwei massiv verschiedene Dinge zu vergleichen, fast die einzige Ähnlichkeit ist, dass sie beide (Arrays und die SPL) in PHP verfügbar sind.

Zu diesem Zweck wäre es im Wesentlichen unsinnig, direkt zu vergleichen oder vorzuschreiben, wann man für Zeiten verwendet werden sollte, in denen beide verwendet werden könnten, um eine Aufgabe zu erfüllen. In diesem Zusammenhang könnte beide miteinander verflochten werden: zum Beispiel die Verwendung der ArrayIterator, um über ein Array zu iterieren, oder die ArrayObject, Array-Stil Syntax beim Arbeiten mit Objekten zu verwenden.

Sie scheinen auch verwirrt zu sein oder nur unklar, was die SPL ist; es sicherlich ist nicht beschränkt auf Tools verwendet, um über Sammlungen von Dingen zu iterieren. Wolltest du fragen nach bestimmten Teilen der Bibliothek, oder bist du vielleicht nur unklar, was darin verfügbar ist?

+0

Ich denke, dass ich etwas widerspreche AVL SPL – Yosef

0

Nicht unbedingt eine Verwirrung vielleicht, weil Leute sich entscheiden können, "SplStack" anstelle von Vanillearray zu verwenden, das mit array_push/popfunktionen verbunden ist.Oder verwenden Sie Arrays in klassischer Art und Weise,

und dann gibt es SplDoublyLinkedList, SplQueue, SplHeap. plus ArrayObjekt.

Die Frage ist also gültig. Und die Antwort ist: Sie machen dasselbe auf eine javaishere Art und es ist langsamer.

SPL allgemein gesprochen ist ein vorläufiger Standard & "off-the-shelf" Klassen & API zu imitieren, wie es in C++ existiert & Java.

IMHO kam es zu spät.

Verwandte Themen