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