Signatur
Beschreibung
AddressInfo ist eine vollständig opake Klasse, die im Zuge der PHP-8.0-Umstellung von Ressourcen auf Objekte eingeführt wurde. Sie repräsentiert Adressinformationen, die von Funktionen wie socket_addrinfo_lookup() zurückgegeben werden und bei Socket-Operationen benötigt werden.
Da die Klasse opak ist, können keine Eigenschaften direkt ausgelesen oder gesetzt werden. Die einzige vorgesehene Verwendung besteht darin, Instanzen dieser Klasse an passende Socket-Funktionen weiterzureichen, etwa socket_addrinfo_connect(), socket_addrinfo_bind() oder socket_addrinfo_explain().
Vor PHP 8.0.0 lieferten entsprechende Funktionen einfache Ressourcen zurück. Die Einführung der Klasse AddressInfo verbessert die Typsicherheit und ermöglicht eine klarere Fehlerbehandlung mit modernen PHP-Werkzeugen wie Typ-Deklarationen und instanceof-Prüfungen.
Instanzen von AddressInfo können nicht direkt instanziiert werden – sie werden ausschließlich von der Socket-Erweiterung intern erzeugt und über entsprechende Funktionen zurückgegeben.
Beispiele
Adressinformationen per socket_addrinfo_lookup() abrufen und verwenden
<?php
// Adressinformationen für einen Host abrufen
$results = socket_addrinfo_lookup('www.example.com', '80', [
'ai_socktype' => SOCK_STREAM,
]);
if ($results === false) {
echo 'Lookup fehlgeschlagen.';
exit;
}
foreach ($results as $addrInfo) {
// $addrInfo ist eine Instanz von AddressInfo
if ($addrInfo instanceof AddressInfo) {
echo 'AddressInfo-Objekt erhalten.' . PHP_EOL;
}
// Details über die Adresse ausgeben
$details = socket_addrinfo_explain($addrInfo);
print_r($details);
break;
}
Verbindung über AddressInfo aufbauen
<?php
// Adressen für localhost auf Port 80 nachschlagen
$results = socket_addrinfo_lookup('localhost', '8080', [
'ai_socktype' => SOCK_STREAM,
]);
if (empty($results)) {
echo 'Keine Adressinformationen gefunden.';
exit;
}
// Ersten gefundenen Eintrag verwenden
$addrInfo = $results[0];
// Socket anhand des AddressInfo-Objekts erstellen und verbinden
$socket = socket_addrinfo_connect($addrInfo);
if ($socket instanceof Socket) {
echo 'Verbindung erfolgreich aufgebaut.' . PHP_EOL;
socket_close($socket);
} else {
echo 'Verbindung fehlgeschlagen.' . PHP_EOL;
}
// Wichtig · Fallstricke
Opake Klasse: AddressInfo besitzt keine öffentlich zugänglichen Eigenschaften oder Methoden. Der einzige Weg, Details zu erhalten, ist der Aufruf von socket_addrinfo_explain(), das ein assoziatives Array zurückgibt.
Nicht instanziierbar: Versuche, new AddressInfo() aufzurufen, führen zu einem Fehler. Objekte dieser Klasse werden ausschließlich intern durch PHP erzeugt.
Ressource-Migration: Code, der vor PHP 8.0 mit is_resource() auf AddressInfo-Ressourcen prüfte, muss auf instanceof AddressInfo umgestellt werden.