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

MongoDB\BSON\Type

Interface

Basis-Interface für alle BSON-Typen in der MongoDB PHP-Erweiterung; ermöglicht Typsicherheit beim Umgang mit BSON-Datenwerten.

seit PHP 1.0.0 Kategorie: db

Signatur

interface MongoDB\BSON\Type

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;
ObjectId: 665f1a2b3c4d5e6f7a8b9c0d Datum: 2024-06-04 Kein BSON-Typ: string

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;
Klasse=MongoDB\BSON\Binary, JSON={"v":{"$binary":{"base64":"AAEC","subType":"00"}}} Klasse=MongoDB\BSON\Regex, JSON={"v":{"$regularExpression":{"pattern":"^start","options":"i"}}}

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