Start · Sprachen · PHP · Referenz · AddressInfo

AddressInfo

Klasse

Opake Klasse, die ab PHP 8.0.0 die bisherigen <code>AddressInfo</code>-Ressourcen ersetzt und Adressinformationen für Netzwerkoperationen kapselt.

seit PHP 8.0.0 Kategorie: http

Signatur

class AddressInfo

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;
}
AddressInfo-Objekt erhalten. Array ( [ai_flags] => 0 [ai_family] => 2 [ai_socktype] => 1 [ai_protocol] => 6 [ai_addr] => Array ( [sin_port] => 80 [sin_addr] => 93.184.216.34 ) )

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;
}
Verbindung erfolgreich aufgebaut.

// 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.