Signatur
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);
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);
// 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.