PHP 8.6 für 19. November geplant: Was Optimierungen bringen
Sphinx-Flashdesign Logo
Geschrieben von
Sphinx-Flashdesign
Developers Signature Designers Signature
Datum
08.11.2026
Lesezeit
6 Min.
Wörter
1073
PHP 8.6 schreibt manche Ihrer Funktionsaufrufe um, bevor Ihr Code überhaupt läuft. Das kann ihn schneller machen, aber in der aktuellen Testversion auch falsch.

In elf Tagen soll PHP 8.6 erscheinen: Das PHP-Projekt plant die finale Version für den 19. November 2026. Seit dem 5. November steht der Release Candidate RC5 zum Testen bereit, ausdrücklich nicht für den Produktivbetrieb[1]. Ein aktueller Exakat-Beitrag und die anschließende Diskussion auf Reddit greifen eine unscheinbare Neuerung auf[5][8]: Der Compiler übersetzt bestimmte Aufrufe von printf und array_map in einfacheren Code. Wir zeigen, was diese PHP-8.6-Optimierungen bringen, welcher Fehler dabei noch offen ist und wie Sie Ihre Website oder Anwendung sicher auf das Update vorbereiten.

PHP 8.6 Optimierungen: Compiler schreibt printf und array_map um
PHP 8.6 Optimierungen: Was der Compiler jetzt umschreibt

Der Compiler ist der Teil von PHP, der Ihren Quellcode vor der Ausführung in interne Befehle übersetzt. In PHP 8.6 erkennt er zwei Muster und ersetzt sie durch gleichwertigen, schnelleren Code[2]:

printf wird zu Stringaufbau
Einfache printf-Aufrufe mit festem Formatstring und nur %s- oder %d-Platzhaltern werden direkt zusammengesetzt, ohne Funktionsaufruf und ohne den Formatstring jedes Mal neu zu lesen[2].
array_map wird zur Schleife
array_map mit einem direkt übergebenen First-Class-Callable wie netto(...) oder einer Partial Function Application (einer Funktion mit teilweise vorbelegten Argumenten) kann unter bestimmten Voraussetzungen in eine foreach-Schleife übersetzt werden. Zwischengeschaltete Closures, also anonyme Hilfsfunktionen, entfallen[2].
Nicht ganz neu
Für sprintf gibt es diese Optimierung schon seit PHP 8.4[4]. PHP 8.6 erweitert sie auf printf.

Die Umschreibung greift nicht überall. Beim printf-Pfad prüft der Compiler unter anderem, ob der Formatstring zur Übersetzungszeit feststeht, kürzer als 256 Bytes ist und die Zahl der Argumente passt[3]. Die array_map-Umschreibung gilt nur für genau ein Eingabe-Array und ist bei aktiviertem strict_types=1 abgeschaltet. Bei Partial Function Applications müssen vorbelegte Argumente direkt angegebene Werte sein, sogenannte Literale. Die Funktion array_map selbst funktioniert dann natürlich weiter wie gewohnt[3].

Kurz zu den Begriffen: array_map wendet eine Funktion auf jedes Element einer Liste an, etwa um alle Bruttopreise in Nettopreise umzurechnen. Ein First-Class-Callable ist die Schreibweise funktion(...), mit der sich eine Funktion seit PHP 8.1 wie ein Wert übergeben lässt. Genau diese moderne Schreibweise belohnt PHP 8.6 jetzt mit schnellerem Code.

<?php
// Kandidat für die Optimierung (ohne strict_types=1, genau ein Array):
$nettoPreise = array_map(netto(...), $bruttoPreise);

// PHP 8.6 übersetzt das sinngemäß in:
$nettoPreise = [];
foreach ($bruttoPreise as $schluessel => $preis) {
    $nettoPreise[$schluessel] = netto($preis);
}
Was die Benchmarks zeigen und was nicht

Ausgelöst hat die aktuelle Diskussion ein Beitrag des PHP-Analysespezialisten Exakat vom 7. November[5], der am 8. November auf Reddit in r/PHP geteilt wurde[8]. Exakat verglich in lokalen Mikrobenchmarks PHP 8.5.12 mit einem Entwicklungsstand von PHP 8.6. Die Callback-Tests umfassten je Messlauf 300 Durchläufe mit jeweils 1.000 Elementen, die Stringtests jeweils eine Million Aufrufe[5]:

38,1 ms
array_map mit First-Class-Callable unter PHP 8.5.12[5]
18,5 ms
derselbe Test unter 8.6-dev[5]
129 ms
sprintf-Test unter 8.6-dev, gegenüber 36,0 ms unter 8.5.12[5]

Beim array_map-Fall halbiert sich die Laufzeit also ungefähr. Beim sprintf-Test war der Entwicklungsstand dagegen deutlich langsamer; Exakat vermutet eine Regression, also eine unbeabsichtigte Leistungsverschlechterung des getesteten Entwicklungsstands; diese Erklärung ist nicht unabhängig bestätigt[5]. Exakat warnt selbst davor, absolute Werte auf eigene Anwendungen zu übertragen. In der Reddit-Diskussion wird zudem hinterfragt, welcher Version die String-Optimierung zuzuordnen ist und wie die Zahlen zu deuten sind[8]. Die Entwickler der array_map-Optimierung hatten im ursprünglichen Patch 172,2 gegenüber 155,1 ms mit OPcache (einem Zwischenspeicher für übersetzten Code) und 166,9 gegenüber 94,5 ms mit Tracing-JIT (Übersetzung in Maschinencode zur Laufzeit) gemessen[6].

Mikrobenchmarks messen kleine, isolierte Codeabschnitte. Ob Ihre Website schneller wird, zeigt nur ein Test mit Ihrer Website.
Sphinx Flashdesign
Achtung: offener Fehler bei Namespaces
Fehlerbericht zur array_map-Umschreibung
Vereinfacht gesagt: PHP kann bei der Umschreibung die falsche Funktion auswählen oder die richtige nicht finden. Am 7. November wurde dazu im PHP-Quellcode-Repository ein Korrekturvorschlag (Pull Request #25286) eröffnet: Die array_map-Umschreibung kann Namespaces und use-function-Importe ignorieren. Dann wird eine falsche globale Funktion aufgerufen oder der Aufruf scheitert. Betroffen sind laut Bericht PHP 8.6 RC3 bis RC5, nicht 8.4 oder 8.5. Am 8. November war der Vorschlag noch offen, ein Fix also noch nicht ausgeliefert[7].

Namespaces funktionieren wie Ordner für Funktionen und Klassen, damit sich gleichnamige Funktionen nicht in die Quere kommen. Mit use function holt man eine Funktion aus einem solchen Ordner in den aktuellen Code. Gerade moderne Projekte organisieren eigene Hilfsfunktionen gern so. Wer PHP 8.6 jetzt testet, sollte genau solche Stellen gezielt prüfen. Wichtig: Innerhalb eines Namespace muss der Compiler array_map eindeutig als globale Funktion erkennen, etwa durch \array_map(...) oder durch use function array_map;. Ohne Qualifizierung oder Import greift die Umschreibung dort nicht[3]. Die Regressionstests des Korrekturvorschlags verwenden \array_map[7]:

<?php
namespace App\Shop;

use function App\Helpers\netto;

$bruttoPreise = [119.0, 238.0];

// Gezielt testen: Wird unter PHP 8.6 RC wirklich App\Helpers\netto() aufgerufen?
$nettoPreise = \array_map(netto(...), $bruttoPreise);

// Erwartet, wenn netto() durch 1,19 teilt: [100.0, 200.0]
var_dump($nettoPreise);
So bereiten Sie das Update vor
Nur in der Testumgebung
RC5 ist eine Testversion. Das PHP-Projekt rät ausdrücklich vom Produktivbetrieb ab[1]. Testen Sie auf einer Kopie Ihrer Website mit echten Daten und realistischen Abläufen.
Abhängigkeiten prüfen
Klären Sie, ob Framework, CMS, Plugins und Composer-Pakete PHP 8.6 bereits unterstützen. Eine offizielle Kompatibilitätsaussage für WordPress oder Laravel lag uns zum Redaktionsschluss nicht vor.
Kritische Muster gezielt testen
Suchen Sie nach array_map-Aufrufen mit First-Class-Callables auf Funktionen aus eigenen Namespaces und prüfen Sie deren Ergebnis. Automatisierte Tests sind hier Gold wert.
Selbst messen
Vergleichen Sie Ladezeiten und Serverlast Ihrer echten Seiten unter 8.5 und 8.6, statt sich auf fremde Mikrobenchmarks zu verlassen.
Mit Rückweg umstellen
Planen Sie den Wechsel nach dem finalen Release, geplant für den 19. November, mit Backup und der Möglichkeit, schnell auf die vorherige PHP-Version zurückzuschalten.
Häufige Fragen zu PHP 8.6
Wann erscheint PHP 8.6?

Die finale Version ist für den 19. November 2026 geplant. Seit dem 5. November steht RC5 zum Testen bereit, nicht für den Produktivbetrieb.

Wird meine Website mit PHP 8.6 automatisch schneller?

Nicht automatisch. Die neuen Optimierungen greifen nur bei bestimmten printf- und array_map-Aufrufen. Wie stark Ihre Anwendung profitiert, zeigt nur ein Vergleich mit Ihren eigenen Seiten.

Was ist strict_types und warum ist das hier wichtig?

Mit declare(strict_types=1) prüft PHP Datentypen strenger. Weil array_map Callbacks intern anders aufruft, ist die neue Umschreibung in solchen Dateien abgeschaltet. array_map funktioniert dort wie bisher.

Betrifft der Namespace-Fehler auch PHP 8.4 oder 8.5?

Laut Fehlerbericht nein. Genannt werden PHP 8.6 RC3 bis RC5 und der aktuelle Entwicklungszweig. Ob der Fix bis zum finalen Release eingearbeitet ist, war am 8. November offen.

Sollte ich sofort auf PHP 8.6 umsteigen?

Erst wenn Ihre Abhängigkeiten PHP 8.6 unterstützen und Ihre Tests auf der finalen Version erfolgreich waren. Bis dahin ist eine Testumgebung der richtige Ort für PHP 8.6.

Quellen
  1. PHP.net: News-Archiv 2026, PHP 8.6.0 RC5 available for testing (05.11.2026): php.net
  2. php-src: UPGRADING am Tag php-8.6.0RC5, Abschnitt Performance: github.com/php/php-src
  3. php-src: Zend/zend_compile.c am Tag php-8.6.0RC5: github.com/php/php-src
  4. PHP-Handbuch: Migration auf PHP 8.4, sonstige Änderungen: php.net
  5. Exakat: PHP 8.6 rewrites some of your calls before you notice (07.11.2026): exakat.io
  6. php-src: Pull Request #20934, array_map-Optimierung: github.com
  7. php-src: Pull Request #25286, Funktionsauflösung bei der array_map-Umschreibung (07.11.2026): github.com
  8. Reddit r/PHP: Diskussion zum Exakat-Beitrag (08.11.2026): reddit.com
Steht bei Ihnen ein PHP-Update an?
Wir prüfen Ihre Laravel- oder WordPress-Anwendung auf Kompatibilität, testen das Update in einer sicheren Testumgebung und planen die Umstellung nach erfolgreichen Kompatibilitäts- und Funktionstests, mit Backup und vorbereitetem Rückweg.
Kostenlos anfragen
Tags: