Start · Sprachen · PHP · Referenz · MongoDB\BSON\PackedArray

MongoDB\BSON\PackedArray

Klasse

Repräsentiert ein BSON-Array in kompakter, serialisierter Binärform und ermöglicht effizienten Zugriff auf BSON-Array-Daten ohne vollständige Deserialisierung.

seit PHP 1.16.0 Kategorie: db

Signatur

final class MongoDB\BSON\PackedArray implements MongoDB\BSON\Type, IteratorAggregate, Serializable, Stringable

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);
0: Apfel 1: Banane 2: Kirsche array(3) { [0]=> string(5) "Apfel" [1]=> string(6) "Banane" [2]=> string(7) "Kirsche" }

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;
Index 2 hat den Wert: 30 Index 99 existiert nicht. BSON-Länge in Bytes: 35

// 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.