Signatur
Beschreibung
LDAP\ResultEntry ist eine opake Klasse, die einen einzelnen Eintrag in einem LDAP-Suchergebnis kapselt. Sie wurde in PHP 8.1.0 eingeführt, um den veralteten Ressourcentyp ldap result entry abzulösen, der bis dahin von Funktionen wie ldap_first_entry() und ldap_next_entry() zurückgegeben wurde.
Als opake Klasse hat sie keine öffentlichen Methoden oder Eigenschaften, die direkt aufgerufen werden können. Stattdessen dient sie als typsicheres Handle, das an LDAP-Funktionen wie ldap_get_attributes(), ldap_get_dn(), ldap_get_values() oder ldap_next_entry() übergeben wird.
Der Vorteil gegenüber Ressourcen ist die bessere Typsicherheit: In Funktionssignaturen und mit instanceof kann nun explizit auf LDAP\ResultEntry geprüft werden. Außerdem werden Objekte korrekt vom Garbage Collector verwaltet.
Bestehender Code, der mit der alten Ressource gearbeitet hat, muss in der Regel nicht angepasst werden, solange die LDAP-Hilfsfunktionen weiterhin verwendet werden – diese akzeptieren sowohl die alte Ressource (in PHP 8.0) als auch das neue Objekt nahtlos.
Beispiele
Einträge aus einem LDAP-Suchergebnis durchlaufen
<?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', 'secret');
$result = ldap_search($connection, 'dc=example,dc=com', '(objectClass=person)');
// ldap_first_entry() gibt ab PHP 8.1 ein LDAP\ResultEntry-Objekt zurück
$entry = ldap_first_entry($connection, $result);
while ($entry instanceof LDAP\ResultEntry) {
$dn = ldap_get_dn($connection, $entry);
$attrs = ldap_get_attributes($connection, $entry);
echo 'DN: ' . $dn . PHP_EOL;
echo 'CN: ' . ($attrs['cn'][0] ?? '–') . PHP_EOL;
$entry = ldap_next_entry($connection, $entry);
}
ldap_unbind($connection);
Typ-Prüfung mit instanceof
<?php
function verarbeiteEintrag(LDAP\Connection $conn, LDAP\ResultEntry $entry): array
{
$dn = ldap_get_dn($conn, $entry);
$attributes = ldap_get_attributes($conn, $entry);
return [
'dn' => $dn,
'attributes' => $attributes,
];
}
$connection = ldap_connect('ldap://ldap.example.com');
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($connection);
$result = ldap_search($connection, 'dc=example,dc=com', '(uid=mmustermann)');
$entry = ldap_first_entry($connection, $result);
if ($entry instanceof LDAP\ResultEntry) {
$data = verarbeiteEintrag($connection, $entry);
print_r($data);
}
ldap_unbind($connection);
// Wichtig · Fallstricke
Opake Klasse: LDAP\ResultEntry besitzt keine öffentlichen Methoden oder Eigenschaften. Alle Operationen auf dem Eintrag werden über die globalen LDAP-Funktionen ausgeführt, die das Objekt als Parameter erwarten.
Migration von Ressourcen: Vor PHP 8.1.0 lieferten Funktionen wie ldap_first_entry() einen Ressourcentyp zurück. Code, der z. B. is_resource() zur Prüfung verwendet hat, muss auf instanceof LDAP\ResultEntry umgestellt werden.
Sicherheit: Stellen Sie sicher, dass LDAP-Verbindungen verschlüsselt (LDAPS oder StartTLS) erfolgen, um den Datentransfer zu sichern. Benutzereingaben, die in LDAP-Filtern genutzt werden, müssen mit ldap_escape() maskiert werden, um LDAP-Injection zu vermeiden.