Start · Sprachen · PHP · Referenz · MongoDB\Driver\Exception\Exception

MongoDB\Driver\Exception\Exception

Interface

Basis-Interface für alle Ausnahmen des offiziellen MongoDB-PHP-Treibers (<code>ext-mongodb</code>).

seit PHP 1.0.0 Kategorie: db

Signatur

interface Exception extends \Throwable

Beschreibung

MongoDB\Driver\Exception\Exception ist das gemeinsame Marker-Interface, das alle Ausnahme-Klassen des MongoDB-Treibers implementieren. Es erweitert das native PHP-Interface \Throwable, sodass sämtliche treiberspezifischen Ausnahmen in einem einzigen catch-Block abgefangen werden können, ohne jede konkrete Ausnahme-Klasse einzeln aufführen zu müssen.

Konkrete Ausnahme-Klassen wie MongoDB\Driver\Exception\ConnectionException, MongoDB\Driver\Exception\AuthenticationException, MongoDB\Driver\Exception\BulkWriteException oder MongoDB\Driver\Exception\RuntimeException implementieren dieses Interface direkt oder über Zwischenstufen. Dadurch lässt sich eine differenzierte Fehlerbehandlung aufbauen: Zunächst spezifische Ausnahmen abfangen, und als letzten Fallback das allgemeine Exception-Interface.

Das Interface ist besonders nützlich in mehrschichtigen Anwendungen oder Bibliotheken, die den MongoDB-Treiber kapseln: Die eigene Abstraktionsschicht kann alle treiberbedingten Fehler einheitlich über catch (\MongoDB\Driver\Exception\Exception $e) erfassen und in anwendungsspezifische Ausnahmen umwandeln, ohne an konkrete Implementierungsdetails des Treibers gebunden zu sein.

Da es sich um ein reines Marker-Interface ohne eigene Methoden handelt, eignet es sich ausschließlich zum Typisieren von catch-Blöcken oder Parameter-Typen, nicht zur direkten Implementierung in eigenen Klassen (außer zur Erweiterung des Ausnahme-Hierarchie-Baums des Treibers).

Beispiele

Alle MongoDB-Treiber-Ausnahmen einheitlich abfangen

<?php
use MongoDB\Driver\Manager;
use MongoDB\Driver\Query;
use MongoDB\Driver\Exception\Exception as MongoException;
use MongoDB\Driver\Exception\ConnectionTimeoutException;

try {
    $manager = new Manager('mongodb://localhost:27017');
    $cursor  = $manager->executeQuery('mydb.users', new Query(['active' => true]));

    foreach ($cursor as $document) {
        var_dump($document);
    }
} catch (ConnectionTimeoutException $e) {
    // Spezifischer Fehler: Verbindungs-Timeout
    echo 'Verbindungs-Timeout: ' . $e->getMessage() . PHP_EOL;
} catch (MongoException $e) {
    // Fallback für alle anderen MongoDB-Treiber-Ausnahmen
    echo 'MongoDB-Fehler (' . get_class($e) . '): ' . $e->getMessage() . PHP_EOL;
}

MongoDB-Ausnahmen in eigene Abstraktionsschicht einbetten

<?php
use MongoDB\Driver\Manager;
use MongoDB\Driver\BulkWrite;
use MongoDB\Driver\Exception\Exception as MongoException;

class UserRepository
{
    private Manager $manager;

    public function __construct(string $uri)
    {
        $this->manager = new Manager($uri);
    }

    /**
     * @throws \RuntimeException bei Datenbankfehlern
     */
    public function insert(array $userData): void
    {
        try {
            $bulk = new BulkWrite();
            $bulk->insert($userData);
            $this->manager->executeBulkWrite('mydb.users', $bulk);
        } catch (MongoException $e) {
            // Treiberspezifische Ausnahme in anwendungseigene umwandeln
            throw new \RuntimeException(
                'Benutzer konnte nicht gespeichert werden: ' . $e->getMessage(),
                (int) $e->getCode(),
                $e
            );
        }
    }
}

$repo = new UserRepository('mongodb://localhost:27017');
try {
    $repo->insert(['name' => 'Max Mustermann', 'email' => 'max@example.com']);
    echo 'Benutzer erfolgreich gespeichert.' . PHP_EOL;
} catch (\RuntimeException $e) {
    echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
Benutzer erfolgreich gespeichert.

// Wichtig · Fallstricke

Nur ein Marker-Interface: MongoDB\Driver\Exception\Exception definiert keine eigenen Methoden. Es dient ausschließlich als gemeinsamer Typ für alle Treiber-Ausnahmen und erleichtert catch-Blöcke sowie Typ-Deklarationen.

Nicht zu verwechseln mit der High-Level-Bibliothek mongodb/mongodb (Composer-Paket), die eigene Ausnahme-Hierarchien besitzt. Diese bauen jedoch intern ebenfalls auf den Ausnahmen des C-Erweiterungstreibers (ext-mongodb) auf.

Verfügbarkeit: Das Interface gehört zur PHP-Erweiterung ext-mongodb (PECL-Paket mongodb), nicht zur älteren ext-mongo-Erweiterung. Sicherstellen, dass extension=mongodb in der php.ini aktiviert ist.