PHP 8.5 erschien am 20. November 2025. Der Beitrag empfiehlt die Version knapp ein Jahr später als Zielversion. Laravel 12 und 13 unterstützen PHP 8.3 bis 8.5, Hosting-Plattformen bieten PHP 8.5 an, und die nächste PHP-Version soll im November erscheinen. Der Autor bewertet den Pipe-Operator als größte Syntaxänderung des Releases.

slug-pipeline.php
$title = ' PHP 8.5 Released ';
$slug = $title
 |> trim(...)
 |> (fn($str) => str_replace(' ', '-', $str))
 |> (fn($str) => str_replace('.', '', $str))
 |> strtolower(...);

Der Pipe-Operator übergibt den linken Wert an das Callable auf der rechten Seite. Verkettungen folgen damit der tatsächlichen Ausführungsreihenfolge von oben nach unten. Jeder Schritt muss ein Argument akzeptieren. Für Funktionen mit einem Argument dient die First-Class-Callable-Syntax wie trim(...), andere Fälle verwenden eine geklammerte Arrow-Funktion. Pipes funktionieren mit normalen PHP-Funktionen und benötigen kein Collection- oder Wrapper-Objekt. Das Beispiel macht aus " PHP 8.5 Released " den Slug "php-85-released".

PHP 8.5 führt eine integrierte URI-Erweiterung ein. Sie arbeitet nach den Standards RFC 3986 und WHATWG und liefert ein Objekt. Damit gibt es eine standardorientierte Alternative zu dem Array-Ergebnis von parse_url(). Uri\Rfc3986\Uri verarbeitet https://php.net/releases/8.5/en.php, getHost() liefert dabei "php.net".

Readonly-Objekte können mit clone($this, ['alpha' => $alpha]) kopiert und an einer Stelle geändert werden. Das Attribut #[\NoDiscard] warnt, wenn ein zu prüfender Rückgabewert ignoriert wird. Ein ausdrücklicher Cast auf (void) kennzeichnet ein beabsichtigtes Verwerfen. array_first() und array_last() liefern den ersten beziehungsweise letzten Array-Wert direkt. Bei einem leeren Array geben beide null zurück.

Statische Closures und First-Class Callables dürfen jetzt in konstanten Ausdrücken stehen, auch als Argumente von Attributen. Regeln können dadurch als typgeprüfter Code vorliegen, wo zuvor Zeichenketten verwendet wurden. Weitere Änderungen sind Backtraces bei fatalen Fehlern, curl_share_init_persistent() zur Wiederverwendung von DNS-Daten und Verbindungen über Requests hinweg, #[\Override] für Properties, final bei Constructor Promotion sowie get_error_handler() und get_exception_handler() zum Auslesen installierter Handler.

Neu oder geändert sind Deprecations für den Backtick-Operator zum Ausführen von Shell-Befehlen. Dafür soll shell_exec('ls') verwendet werden. Die Cast-Namen (boolean), (integer), (double) und (binary) weichen (bool), (int), (float) und (string). Ein null-Schlüssel in einem Array soll durch den expliziten Schlüssel '' ersetzt werden. Ein switch-case mit abschließendem Semikolon braucht einen Doppelpunkt. __sleep() und __wakeup() sind soft-deprecated, empfohlen werden __serialize() und __unserialize(). Die INI-Einstellung disable_classes wurde ohne Ersatz entfernt.

PHP 8.5 warnt außerdem beim Cast von NAN, beim Destrukturieren eines Nicht-Arrays und beim Umwandeln eines zu großen Floats in einen int. Vor dem Produktionswechsel sollten Test-Suites mit aktivierten Deprecation-Warnungen laufen. Für Laravel empfiehlt der Beitrag Pipes in einfachen PHP-Helpers, Actions und Data Mappern, clone-Updates für DTOs und Value Objects sowie #[\NoDiscard] für Methoden wie save(), deren false-Rückgabe einen Fehler signalisiert.