Assoziatives Array versus SplObjectStorage
Ich arbeite an code zu verwalten, eine Sammlung von einzigartigen Objekten. Der erste Prototyp dieser code verwendet ein assoziatives array, im Grunde so, dass die Art, wie ich es immer getan haben.
Ich bin aber auch scharf auf den nutzen von Funktionen, die Hinzugefügt wurden, um mehr moderne Versionen von PHP wie SplObjectStorage, dies zu tun, statt, zum Teil als eine Lernerfahrung, teilweise, weil es gebunden ist, zu bieten Vorteile (benchmarks, die ich gesehen habe vermuten, dass SplObjectStorage schneller sein können als arrays in eine Menge von Fällen).
Die aktuelle Implementierung hat ein assoziatives array, dass ich prüfe mit in_array um zu sehen, ob ein Objekt bereits in dem array vor dem hinzufügen eines neuen Objekts zu.
Das große problem, das ich sehen kann mit SplObjectStorage ist, dass es offenbar nicht (auf den ersten Blick) zur Unterstützung von Schlüssel/Wert-assoziatives array Verhalten, und kann nur behandelt werden, wie in einem indizierten array. Jedoch die Dokumentation für die neueren Funktionen von PHP nicht bis zu den standards der Dokumentation von etablierten teilen der Sprache, und ich könnte einfach etwas fehlt.
Kann ich SplObjectStorage statt von einem assoziativen array? Wenn ja, wie definiere ich die Taste, wenn das hinzufügen eines neuen Objekts? Noch wichtiger ist, was sind die relativen vor-und Nachteile von SplObjectStorage, wenn im Vergleich zu assoziativen arrays?
- möglich, Duplikat der SplObjectStorage funktioniert nicht mit String, was zu tun ist?
- Ich glaube nicht, dass meine Frage alle, die ähnlich zu der von Ihnen angegeben.
- Lesen Sie noch einmal
- Nahm einen genaueren Blick, aber immer noch nicht sehen, wie mein problem (Kann man verwenden, SplObjectStorage, anstelle des assoziativ - array und wenn ja, was sind die Vorteile und Nachteile?) ein Duplikat der, dass man (Warum kann ich keine strings in ein SplObjectStorage?)
- Ich denke, die Frage hat vorgeschlagen, wenn Sie wollen, zu tun, associate array, dann verwenden Sie die spl-Objekt, Raute und befestigen Sie an den SL-storage-Objekt. Nachteil? ist mühselig. Die Vorteile der spl-storage-Objekt ist, da ist mit index-Taste (siehe die Umsetzung nur mit next,prev auf das Fortschreiten der Zeiger).Und setzen Sie zurück zu verknüpfen Schlüssel ist nur die Niederlage der Zweck. Dies ist, was ich denken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht sehen, die
SplObjectStorage
als Schlüssel-Wert-Speicher, sondern lediglich einer Menge von Objekten,. Etwas ist in dem Satz oder nicht, aber seine position ist nicht wichtig.Den "Schlüssel" ein element in der
SplObjectStorage
ist in der Tat der hash des Objekts. Es macht es, es ist nicht möglich, mehrere Kopien der gleichen Objekt-Instanz einerSplObjectStorage
, so dass Sie nicht haben, um zu überprüfen, ob eine Kopie bereits vorhanden ist, bevor Sie hinzufügen.Jedoch in
PHP 5.4
gibt es eine neue Methode namensgetHash()
die Sie überschreiben können, die zurückkehren wird, den "hash" des Objekts. Diese - in gewissem Sinne - gibt zurück/setzt den Schlüssel so können Sie es speichern, unter verschiedenen Bedingungen.Den wichtigsten Vorteil von
SplObjectStorage
ist die Tatsache, dass Sie eine Vielzahl von Methoden für den Umgang und die Interaktion mit verschiedenen Gruppen (contains()
,removeAll()
,removeAllExcept()
etc). Seine Geschwindigkeit ist geringfügig besser, aber die Speicherauslastung ist schlimmer als normale PHP-arrays.Ergebnisse nach dem ausführen benchmark mit 10000 Iterationen auf
PHP 5.6.13
:Wie Sie sehen können,
Array
ist nicht merklich schneller alsSplObjectStorage
, aber verwenden 34 % weniger Speicher.Wenn alle der Speicher zugeordnet array wird verwendet, bis der Speicher zugewiesen werden, werden verdoppelt. In diesem Zusammenhang eine Sammlung von Objekten, die möglicherweise effektiver Struktur.