PHP 7 bekommt Scalar Type Declarations
Nachdem vorherige Versuche, neue Deklarationen fĂĽr skalare Typen einzufĂĽhren, gescheitert waren, soll der nun angenommene Vorschlag die Lager der Freunde starker und schwacher Typisierung vereinen.
- Julia Schmidt
Die Stimmberechtigten des PHP-Entwicklungsprozess haben per Abstimmung beschlossen, dass Scalar Type Declarations ihren Weg in PHP 7 finden sollen. Das Feature war eines derer, dessen Zukunft durch den Rückzug von Entwicklerin Andrea Faulds eine Zeit lang ungewiss war. Es soll in PHP 7 dafür sorgen, dass sich Programme schreiben lassen, deren Code korrekt und selbsterklärend ist.
Der entsprechende und nun angenommene RFC schlägt Typendeklarationen für die skalaren Typen int, float, string und bool vor. Hierbei wird standardmäßig schwaches Type Checking durchgeführt, wie es PHP durch zend_parse_parameters für Skalare anwendet. Außerdem umfasst der Vorschlag die Direktive declare(strict_types=1); die sich auf Dateiebene verwenden lässt und eine strenge Typprüfung für alle Funktionsaufrufe und Rückgabeanweisungen einer Datei samt ihrer Erweiterungen und eingebauten PHP-Funktionen vorsieht. Ein Aufrufen von Erweiterungen und eingebauten Funktionen mit der Direktive erzeugt einen E_RECOVERABLE_ERROR sollte es einen Fehler beim Parsen der Parameter geben, sodass es keine Probleme mit anderen Deklarationen geben sollte. Eine gute Erklärung und Diskussionen der Funktionsweise lassen sich im RFC-Dokument nachlesen.
PHP hatte schon seit Version 5.0 Parameter Type Declarations für Interface- und Klassennamen, seit 5.1 für Arrays und seit 5.4 für Callables. Skalare Typen fehlte diese Deklarationen bisher, sodass es der PHP-Laufzeitumgebung nicht möglich war, sicherzustellen, dass Funktionen korrekt typisierte Argumente erhalten. Frühere Versuche, sie einzuführen, scheiterten in der Vergangenheit daran, dass sie meist einem schwach typisierten Ansatz folgten und die Lager der Entwickler, die sich für und die, die sich gegen starke Typisierung aussprachen, nicht gut vereinen konnte. Darüber hinaus passte das vorgeschlagene Verhalten in Bezug auf Umwandlung und Validierung der Typen in einigen Fällen nicht zu dem von Erweiterungen und eingebauten PHP-Funktionen. (jul)