Signatur
Beschreibung
MongoDB\BSON\Type ist das zentrale Marker-Interface der MongoDB PHP-Erweiterung (ext-mongodb), von dem alle konkreten BSON-Typ-Klassen abstammen. Dazu gehören beispielsweise MongoDB\BSON\ObjectId, MongoDB\BSON\UTCDateTime, MongoDB\BSON\Regex, MongoDB\BSON\Binary und weitere.
Das Interface selbst definiert keine Methoden und dient primär als gemeinsamer Typ-Anker für alle BSON-Werte. Dadurch lassen sich Typ-Deklarationen in eigenem Code schreiben, die jeden beliebigen BSON-Typ akzeptieren, ohne jeden einzelnen Untertyp explizit auflisten zu müssen.
Typischer Einsatz ist die Typ-Prüfung mit instanceof MongoDB\BSON\Type in Deserialisierungs- oder Validierungslogik, um sicherzustellen, dass ein Wert aus einem BSON-Dokument stammt und kein einfacher PHP-Skalar ist. Eigene Klassen können dieses Interface nicht direkt implementieren; nur die von der Erweiterung bereitgestellten Klassen implementieren es.
- MongoDB\BSON\ObjectId – 12-Byte-Dokument-Identifikator
- MongoDB\BSON\UTCDateTime – Datum/Uhrzeit in Millisekunden
- MongoDB\BSON\Regex – Regulärer Ausdruck mit Flags
- MongoDB\BSON\Binary – Binärdaten mit Subtyp
- MongoDB\BSON\Decimal128 – 128-Bit-Dezimalzahl
Beispiele
Typ-Prüfung eines BSON-Wertes aus einem Dokument
<?php
use MongoDB\BSON\Type;
use MongoDB\BSON\ObjectId;
use MongoDB\BSON\UTCDateTime;
function describeBsonValue(mixed $value): string {
if (!($value instanceof Type)) {
return 'Kein BSON-Typ: ' . gettype($value);
}
return match (true) {
$value instanceof ObjectId => 'ObjectId: ' . $value,
$value instanceof UTCDateTime => 'Datum: ' . $value->toDateTime()->format('Y-m-d'),
default => 'BSON-Typ: ' . get_class($value),
};
}
$id = new ObjectId();
$date = new UTCDateTime();
$text = 'Hallo';
echo describeBsonValue($id) . PHP_EOL;
echo describeBsonValue($date) . PHP_EOL;
echo describeBsonValue($text) . PHP_EOL;
Typ-Deklaration mit MongoDB\BSON\Type in einer Methode
<?php
use MongoDB\BSON\Type as BsonType;
use MongoDB\BSON\Binary;
use MongoDB\BSON\Regex;
class BsonValueSerializer {
/**
* Serialisiert einen beliebigen BSON-Wert als lesbaren String.
*/
public function serialize(BsonType $value): string {
return sprintf(
'Klasse=%s, JSON=%s',
get_class($value),
MongoDB\BSON\toRelaxedExtendedJSON(
MongoDB\BSON\fromPHP(['v' => $value])
)
);
}
}
$serializer = new BsonValueSerializer();
$binary = new Binary('\x00\x01\x02', Binary::TYPE_GENERIC);
$regex = new Regex('^start', 'i');
echo $serializer->serialize($binary) . PHP_EOL;
echo $serializer->serialize($regex) . PHP_EOL;
// Wichtig · Fallstricke
Nicht implementierbar durch Benutzercode: Eigene PHP-Klassen können MongoDB\BSON\Type nicht implementieren, da das Interface intern durch die C-Erweiterung geschützt ist. Versuche führen zu einem Fehler zur Laufzeit. Stattdessen sollten MongoDB\BSON\Unserializable und MongoDB\BSON\Serializable für benutzerdefinierte Serialisierung verwendet werden.
Das Interface existiert seit Version 1.0.0 der ext-mongodb-Erweiterung (nicht zu verwechseln mit dem veralteten ext-mongo). Bei Verwendung des PHPLIB-Treibers (mongodb/mongodb) wird das Interface über die Erweiterung automatisch zur Verfügung gestellt.