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

MongoDB\BSON\fromPHP

Funktion

Konvertiert einen PHP-Array oder ein PHP-Objekt in eine rohe BSON-Binärzeichenkette.

seit PHP 1.0.0 Kategorie: db

Signatur

MongoDB\BSON\fromPHP(array|object $value): string

Beschreibung

MongoDB\BSON\fromPHP() serialisiert einen PHP-array oder ein PHP-object in das BSON-Binärformat (Binary JSON), das MongoDB intern zur Datenspeicherung verwendet. Die Funktion ist Teil der MongoDB PHP-Erweiterung (ext-mongodb) und ermöglicht es, BSON-Dokumente manuell zu erzeugen, ohne eine Datenbankverbindung zu benötigen.

Die Funktion ist besonders nützlich beim Debuggen, beim Testen von BSON-Serialisierungslogik oder wenn BSON-Daten direkt auf Byte-Ebene verarbeitet werden müssen – etwa beim Schreiben eigener Netzwerkprotokolle oder Speicher-Backends. Das erzeugte Binärstring kann anschließend mit MongoDB\BSON\toPHP() wieder in einen PHP-Wert deserialisiert werden.

Klassen, die das Interface MongoDB\BSON\Serializable implementieren, werden entsprechend ihrer bsonSerialize()-Methode serialisiert. Ebenso werden Typwrapper wie MongoDB\BSON\ObjectId, MongoDB\BSON\UTCDateTime oder MongoDB\BSON\Regex korrekt als ihre jeweiligen BSON-Typen kodiert.

Zu beachten ist, dass der Rückgabewert ein rohes Binär-String ist und nicht für direkte Ausgabe oder Speicherung in Text-Formaten geeignet ist. Für eine lesbare Darstellung kann MongoDB\BSON\toJSON() oder MongoDB\BSON\toRelaxedExtendedJSON() verwendet werden.

Parameter

Name Typ Default Beschreibung
$value Pflicht array|object Der zu serialisierende PHP-Wert. Muss ein array (assoziativ oder sequenziell) oder ein object sein. Objekte können das Interface MongoDB\BSON\Serializable implementieren, um die Serialisierung zu steuern.

Rückgabewert

Typ
string
Beschreibung
Gibt einen rohen Binär-String zurück, der das serialisierte BSON-Dokument enthält. Der String kann direkt an MongoDB\BSON\toPHP() übergeben werden, um ihn wieder in einen PHP-Wert umzuwandeln.

Beispiele

Einfachen Array in BSON serialisieren und zurückkonvertieren

<?php
use MongoDB\BSON\fromPHP;
use MongoDB\BSON\toPHP;

$document = [
    'name'  => 'Max Mustermann',
    'alter' => 30,
    'aktiv' => true,
];

$bson = MongoDB\BSON\fromPHP($document);
echo 'BSON-Länge in Bytes: ' . strlen($bson) . PHP_EOL;

// Zurückkonvertieren in PHP
$wiederhergestellt = MongoDB\BSON\toPHP($bson);
var_dump($wiederhergestellt);
BSON-Länge in Bytes: 48 object(stdClass)#1 (3) { ["name"]=> string(15) "Max Mustermann" ["alter"]=> int(30) ["aktiv"]=> bool(true) }

BSON mit MongoDB-Typwrappern erzeugen

<?php
$dokument = [
    '_id'         => new MongoDB\BSON\ObjectId(),
    'erstellt_am' => new MongoDB\BSON\UTCDateTime(),
    'muster'      => new MongoDB\BSON\Regex('^foo', 'i'),
    'wert'        => 42.5,
];

$bson = MongoDB\BSON\fromPHP($dokument);

// Zur Überprüfung als Extended JSON ausgeben
$json = MongoDB\BSON\toRelaxedExtendedJSON($bson);
echo $json . PHP_EOL;
{"_id":{"$oid":"..."},"erstellt_am":{"$date":{"$numberLong":"..."}},"muster":{"$regularExpression":{"pattern":"^foo","options":"i"}},"wert":42.5}

Serializable-Objekt in BSON konvertieren

<?php
class Produkt implements MongoDB\BSON\Serializable
{
    public function __construct(
        private string $name,
        private float  $preis
    ) {}

    public function bsonSerialize(): array
    {
        return [
            'name'  => $this->name,
            'preis' => $this->preis,
        ];
    }
}

$produkt = new Produkt('Laptop', 999.99);
$bson    = MongoDB\BSON\fromPHP($produkt);

echo MongoDB\BSON\toCanonicalExtendedJSON($bson) . PHP_EOL;
{"name":"Laptop","preis":{"$numberDouble":"999.9900000000000091..." }}

// Wichtig · Fallstricke

Binäre Ausgabe: Der Rückgabewert ist ein rohes Binär-String und enthält nicht-druckbare Zeichen. Er sollte niemals direkt in HTML ausgegeben werden, da dies zu Darstellungsfehlern oder Sicherheitsproblemen führen kann.

Sequenzielle vs. assoziative Arrays: Ein sequenzieller PHP-Array (Schlüssel 0, 1, 2, …) wird als BSON-Array serialisiert, ein assoziativer Array hingegen als BSON-Dokument. Diese Unterscheidung ist bei der Deserialisierung mit toPHP() zu beachten.

Tiefe Verschachtelung: Verschachtelte Arrays und Objekte werden rekursiv serialisiert. Zirkuläre Referenzen führen zu einem Fehler.

Verfügbarkeit: Die Funktion ist Teil des mongodb-PECL-Extensions und steht nicht in der veralteten mongo-Extension zur Verfügung. Mindestens ext-mongodb Version 1.0.0 ist erforderlich.