Start · Sprachen · PHP · Referenz · LDAP\Result

LDAP\Result

Klasse

Opake Klasse, die ab PHP 8.1.0 die frühere <code>ldap result</code>-Ressource ersetzt und das Ergebnis einer LDAP-Abfrage kapselt.

seit PHP 8.1.0 Kategorie: misc

Signatur

class LDAP\Result

Beschreibung

Die Klasse LDAP\Result ist eine vollständig opake Klasse, das heißt, sie besitzt keine öffentlich zugänglichen Eigenschaften oder Methoden. Sie dient ausschließlich als Typ-sicheres Objekt, das das Ergebnis einer LDAP-Operation – beispielsweise von ldap_search(), ldap_list() oder ldap_read() – kapselt.

Vor PHP 8.1.0 gaben diese Funktionen eine Ressource vom Typ ldap result zurück. Ab PHP 8.1.0 wird stattdessen eine Instanz von LDAP\Result zurückgegeben. Bestehender Code, der auf Ressourcen-Werten basiert, kann in der Regel ohne Änderungen weiterverwendet werden, da PHP diese Objekte intern wie Ressourcen behandelt.

Instanzen von LDAP\Result können an alle LDAP-Funktionen übergeben werden, die früher eine ldap result-Ressource erwartet haben, wie z. B. ldap_get_entries(), ldap_count_entries() oder ldap_free_result(). Eine direkte Instanziierung dieser Klasse durch Anwendungscode ist nicht vorgesehen.

Die Einführung dieser Klasse verbessert die Typsicherheit und ermöglicht es, LDAP-Ergebnis-Objekte klar mit Typdeklarationen (LDAP\Result) in Funktions- und Methodensignaturen zu kennzeichnen, was die Codequalität und IDE-Unterstützung deutlich verbessert.

Beispiele

LDAP-Suche mit LDAP\Result-Objekt

<?php
$connection = ldap_connect('ldap://ldap.example.com');
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($connection, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');

// ldap_search() gibt ab PHP 8.1 ein LDAP\Result-Objekt zurück
$result = ldap_search($connection, 'dc=example,dc=com', '(objectClass=person)');

if ($result instanceof LDAP\Result) {
    echo 'Anzahl der Einträge: ' . ldap_count_entries($connection, $result) . PHP_EOL;

    $eintraege = ldap_get_entries($connection, $result);
    for ($i = 0; $i < $eintraege['count']; $i++) {
        echo 'DN: ' . $eintraege[$i]['dn'] . PHP_EOL;
    }

    ldap_free_result($result);
}

ldap_unbind($connection);
Anzahl der Einträge: 3 DN: cn=Max Mustermann,dc=example,dc=com DN: cn=Erika Musterfrau,dc=example,dc=com DN: cn=John Doe,dc=example,dc=com

Typdeklaration mit LDAP\Result in eigener Funktion

<?php
function verarbeiteErgebnis(LDAP\Connection $verbindung, LDAP\Result $ergebnis): array
{
    $anzahl = ldap_count_entries($verbindung, $ergebnis);
    $eintraege = ldap_get_entries($verbindung, $ergebnis);

    return [
        'anzahl' => $anzahl,
        'eintraege' => $eintraege,
    ];
}

$verbindung = ldap_connect('ldap://ldap.example.com');
ldap_set_option($verbindung, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($verbindung);

$ergebnis = ldap_search($verbindung, 'dc=example,dc=com', '(uid=mmustermann)');
$daten = verarbeiteErgebnis($verbindung, $ergebnis);

echo 'Gefundene Einträge: ' . $daten['anzahl'] . PHP_EOL;
ldap_unbind($verbindung);
Gefundene Einträge: 1

// Wichtig · Fallstricke

Migration von Ressourcen zu Objekten: Code, der is_resource($ergebnis) verwendet, um zu prüfen, ob eine LDAP-Abfrage erfolgreich war, funktioniert ab PHP 8.1.0 nicht mehr korrekt, da statt einer Ressource nun ein Objekt zurückgegeben wird. Verwende stattdessen $ergebnis instanceof LDAP\Result oder prüfe auf false (bei Fehler).

Direkte Instanziierung: Die Klasse kann nicht manuell instanziiert werden (new LDAP\Result() ist nicht möglich). Instanzen werden ausschließlich von LDAP-Ergebnisfunktionen wie ldap_search(), ldap_list() und ldap_read() erzeugt.

Speicherverwaltung: Es empfiehlt sich, nach der Verarbeitung eines Ergebnisses ldap_free_result() aufzurufen, um den belegten Speicher explizit freizugeben, insbesondere bei großen Ergebnismengen.