Signatur
Beschreibung
MongoDB\BSON\PackedArray kapselt ein BSON-Array als unveränderliches (immutables) Binärobjekt. Im Gegensatz zu regulären PHP-Arrays oder MongoDB\BSON\Document speichert PackedArray die Daten in der nativen BSON-Binärdarstellung, was insbesondere bei der Übergabe von BSON-Daten zwischen Schichten einer Anwendung Overhead reduziert.
Die Klasse implementiert IteratorAggregate, sodass über ein PackedArray-Objekt direkt mit foreach iteriert werden kann. Die Elemente werden dabei lazy deserialisiert. Über die Methoden get() und has() kann gezielt auf einzelne Einträge zugegriffen werden.
Da PackedArray als final und unveränderlich deklariert ist, gibt es keine Methode zum direkten Ändern der Daten. Stattdessen können neue Instanzen mithilfe von MongoDB\BSON\PackedArray::fromPHP() erzeugt werden, indem ein PHP-Array übergeben wird. Die Methode toPHP() wandelt das Objekt zurück in eine PHP-Datenstruktur um.
Typische Einsatzgebiete sind das direkte Arbeiten mit rohen BSON-Binärdaten aus der Datenbank, das Weitergeben von BSON-Daten ohne kostspielige Konvertierungen sowie die Verwendung in Performance-kritischen Anwendungsteilen, wo der Umweg über PHP-Arrays vermieden werden soll.
Beispiele
PackedArray aus PHP-Array erstellen und iterieren
<?php
require 'vendor/autoload.php';
// PackedArray aus einem gewöhnlichen PHP-Array erstellen
$packed = MongoDB\BSON\PackedArray::fromPHP(['Apfel', 'Banane', 'Kirsche']);
// Über die Einträge iterieren (lazy deserialisiert)
foreach ($packed as $index => $wert) {
echo $index . ': ' . $wert . PHP_EOL;
}
// Zurück zu PHP-Array
$phpArray = $packed->toPHP();
var_dump($phpArray);
Einzelne Elemente prüfen und abrufen
<?php
require 'vendor/autoload.php';
$packed = MongoDB\BSON\PackedArray::fromPHP([10, 20, 30, 40, 50]);
// Prüfen ob ein Index existiert
if ($packed->has(2)) {
$wert = $packed->get(2);
echo 'Index 2 hat den Wert: ' . $wert . PHP_EOL;
}
// Nicht vorhandener Index
if (!$packed->has(99)) {
echo 'Index 99 existiert nicht.' . PHP_EOL;
}
// BSON-Binärdaten als Zeichenkette ausgeben (rohe Bytes)
$bsonBytes = (string) $packed;
echo 'BSON-Länge in Bytes: ' . strlen($bsonBytes) . PHP_EOL;
// Wichtig · Fallstricke
Unveränderlichkeit: PackedArray-Objekte sind immutabel. Es gibt keine Methoden wie set() oder push(). Um Änderungen vorzunehmen, muss das ursprüngliche Objekt in ein PHP-Array umgewandelt (toPHP()), angepasst und anschließend erneut mit fromPHP() in ein PackedArray konvertiert werden.
Nur numerische Schlüssel: Ein BSON-Array erwartet sequentiell beginnende, nullbasierte Integer-Schlüssel (0, 1, 2, …). Werden nicht-numerische oder nicht-sequentielle Schlüssel übergeben, sollte stattdessen MongoDB\BSON\Document verwendet werden.
Klonen und Serialisierung: Die Klasse implementiert Serializable über die Methoden serialize() und unserialize(). Das Serialisierungsformat ist die rohe BSON-Binärdarstellung, was die Kompatibilität mit anderen BSON-Implementierungen sicherstellt.