Start · Sprachen · PHP · Referenz · LDAP\Connection

LDAP\Connection

Klasse

Vollständig opake Klasse, die eine LDAP-Verbindungsressource repräsentiert und ab PHP 8.1.0 die frühere <code>ldap link</code>-Ressource ersetzt.

seit PHP 8.1.0 Kategorie: misc

Signatur

class LDAP\Connection

Beschreibung

Die Klasse LDAP\Connection ist eine sogenannte opake Klasse – sie besitzt keine öffentlich zugänglichen Eigenschaften oder Methoden und kann nicht direkt instanziiert werden. Stattdessen wird ein Objekt dieser Klasse ausschließlich durch LDAP-Funktionen wie ldap_connect() erzeugt und als Verbindungs-Handle an andere LDAP-Funktionen weitergegeben.

Bis PHP 8.0 verwendeten LDAP-Funktionen den generischen Typ resource (genauer: ldap link) für Verbindungs-Handles. Ab PHP 8.1.0 wurden diese Ressourcen durch echte Objekte des Typs LDAP\Connection ersetzt. Bestehender Code, der mit is_resource() prüfte, ob ein Handle gültig ist, muss entsprechend auf instanceof LDAP\Connection umgestellt werden.

Der Vorteil gegenüber der früheren Ressource liegt darin, dass das Handle nun typsicher in Funktionssignaturen und Type-Hints verwendet werden kann. Viele LDAP-Funktionen akzeptieren jetzt explizit einen Parameter vom Typ LDAP\Connection, was statische Analysetools und IDEs bei der Typprüfung unterstützt.

Die Verbindung wird automatisch geschlossen, sobald das Objekt den Scope verlässt und keine weiteren Referenzen darauf bestehen, oder wenn ldap_close() explizit aufgerufen wird.

Beispiele

LDAP-Verbindung herstellen und Typ prüfen

<?php
// Verbindung zum LDAP-Server herstellen
$connection = ldap_connect('ldap://ldap.example.com', 389);

if ($connection instanceof LDAP\Connection) {
    echo 'Gültiges LDAP\Connection-Objekt erhalten.' . PHP_EOL;

    // Protokollversion setzen
    ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3);

    // Anonymes Binden
    $bound = ldap_bind($connection);

    if ($bound) {
        echo 'Erfolgreich anonym gebunden.' . PHP_EOL;
    }

    ldap_close($connection);
} else {
    echo 'Verbindung fehlgeschlagen.' . PHP_EOL;
}
Gültiges LDAP\Connection-Objekt erhalten. Erfolgreich anonym gebunden.

Verwendung in einer typisierten Funktion

<?php
function sucheLdapEintraege(LDAP\Connection $conn, string $baseDn, string $filter): array
{
    $result = ldap_search($conn, $baseDn, $filter);
    if ($result === false) {
        return [];
    }
    $entries = ldap_get_entries($conn, $result);
    return $entries !== false ? $entries : [];
}

$connection = ldap_connect('ldap://ldap.example.com');
if ($connection instanceof LDAP\Connection) {
    ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_bind($connection);

    $eintraege = sucheLdapEintraege(
        $connection,
        'dc=example,dc=com',
        '(objectClass=person)'
    );

    echo 'Gefundene Einträge: ' . $eintraege['count'] . PHP_EOL;
    ldap_close($connection);
}
Gefundene Einträge: 3

// Wichtig · Fallstricke

Migration von PHP 8.0 auf 8.1+: Code, der is_resource($conn) verwendet, um die Gültigkeit eines LDAP-Handles zu prüfen, liefert ab PHP 8.1 false, da nun ein Objekt statt einer Ressource zurückgegeben wird. Ersetzen Sie solche Prüfungen durch $conn instanceof LDAP\Connection.

Sicherheit: Übertragen Sie LDAP-Verbindungs-Objekte nicht über unsichere Kanäle oder speichern Sie diese in Sessions. Behandeln Sie Benutzereingaben, die in LDAP-Filtern eingesetzt werden, immer mit geeigneter Escaping-Funktion (z. B. ldap_escape()), um LDAP-Injection zu verhindern.

Da die Klasse vollständig opak ist, kann sie weder erweitert (extends) noch manuell instanziiert werden (new LDAP\Connection() ist nicht möglich).