News
PHP 8.6 Beta 2: Drei Änderungen, die man im Code merkt
PHP 8.6 Beta 2 ist nur zum Testen da. Interessant wird sie durch konkrete Änderungen: bessere Property-Reflection, Override-Prüfung für Konstanten und aussagekräftigere Fehlermeldungen.
PHP 8.6 Beta 2 ist seit dem 27. August 2026 verfügbar. Dass eine Beta nicht auf den Produktivserver gehört, ist richtig – aber noch kein Grund für einen Artikel. Interessant wird eine neue PHP-Version erst dort, wo sich beim Programmieren tatsächlich etwas ändert.
Bei PHP 8.6 gibt es dafür bereits konkrete Beispiele.
Reflection kann endlich nach Lesbarkeit und Schreibbarkeit fragen
ReflectionProperty::isPublic() beantwortet bei modernen PHP-Klassen nicht zuverlässig die praktische Frage, ob eine Property aus einem bestimmten Scope tatsächlich gelesen oder geschrieben werden darf. readonly, asymmetrische Sichtbarkeit und Property Hooks haben die Sache komplizierter gemacht.
PHP 8.6 ergänzt deshalb ReflectionProperty::isReadable() und isWritable():
class User
{
public function __construct(
public readonly string $id,
public string $name,
) {}
}
$user = new User('u-42', 'Ada');
$id = new ReflectionProperty(User::class, 'id');
$name = new ReflectionProperty(User::class, 'name');
var_dump($id->isReadable(null, $user)); // true
var_dump($id->isWritable(null, $user)); // false
var_dump($name->isWritable(null, $user)); // true
Das ist vor allem für Serializer, Hydratoren, Mapper, Debugger und Framework-Code interessant: Statt Sichtbarkeitsregeln selbst nachzubauen, kann der Code PHP fragen, ob ein Zugriff im gewünschten Scope zulässig wäre.
#[Override] prüft jetzt auch Klassenkonstanten
Das Attribut #[\Override] kennt PHP bereits für Methoden und Properties. PHP 8.6 erweitert die Prüfung auf Klassenkonstanten.
class ApiConfig
{
protected const VERSION = 'v1';
}
class NewApiConfig extends ApiConfig
{
#[\Override]
public const VERSION = 'v2';
}
Das sieht unspektakulär aus, verhindert aber einen typischen Refactoring-Fehler. Wird VERSION in der Basisklasse später umbenannt oder entfernt, ist die Konstante in der Kindklasse nicht plötzlich nur noch zufällig gleich benannt: PHP kann erkennen, dass das versprochene Override nicht mehr existiert, und meldet einen Fehler.
Gerade bei Bibliotheken mit vielen Interfaces und Basisklassen macht das die Absicht im Code überprüfbar statt nur dokumentiert.
Fehlermeldungen können die tatsächlichen Argumente zeigen
Bei Fehlern aus internen PHP-Funktionen war bislang oft sichtbar, welche Funktion gescheitert ist – aber nicht konsistent, mit welchen Argumenten sie aufgerufen wurde. PHP 8.6 führt dafür die INI-Option error_include_args ein.
Ein einfacher Aufruf wie:
unlink('/tmp');
chown('/', 'www-data');
chmod('/', 0777);
kann dadurch Fehlermeldungen liefern, in denen die übergebenen Werte direkt beim Funktionsnamen stehen. Das spart beim Debugging den Umweg zurück zum aufrufenden Code.
Der Komfort hat allerdings eine Kehrseite: Argumente können sensible Daten enthalten. Für Produktionslogs sollte die Option deshalb bewusst bewertet werden und nicht gedankenlos aktiviert bleiben.
Und was bedeutet Beta 2?
Die Beta selbst ist weiterhin eine Testversion. Das PHP-Projekt fordert ausdrücklich zum Testen auf und warnt vor dem produktiven Einsatz. Beta 3 ist für den 10. September 2026 angekündigt.
Der sinnvolle Test ist damit aber konkreter als nur „CI einmal grün machen“: Framework- und Tooling-Code kann die neuen Reflection-Methoden ausprobieren, Bibliotheken können #[\Override] auf Konstanten testen und Entwickler können prüfen, ob das neue Fehlerformat ihre Logs oder Parser beeinflusst.
Das sind Änderungen, die man als Programmierer tatsächlich sehen und ausprobieren kann. Genau deshalb ist PHP 8.6 Beta 2 einen Blick wert – nicht weil eine weitere Versionsnummer erschienen ist.
Quellen
- PHP: PHP 8.6.0 Beta 2 available for testing, 27. August 2026
- PHP RFC: isReadable/Writable reflection methods, implementiert in PHP 8.6
- PHP RFC:
#[\\Override]for class constants, implementiert in PHP 8.6 - PHP RFC: Display Function Arguments in Errors, implementiert in PHP 8.6
Quellenstand: 5. September 2026.