/Programmiersprachen: PHP 7.2 erscheint pünktlich

Programmiersprachen: PHP 7.2 erscheint pünktlich

PHP 7.2

Bei der frischen Version läuft nicht nur das Release nach Plan, sondern auch der Wechsel der Krypto-Bibliothek auf Libsodium steht bereits seit Anfang des Jahres fest. Die sprachlichen Neuerungen sollen vor allem mehr Klarheit schaffen.

Nach einer gut viermonatigen Betaphase legt PHP 7.2 mit dem Release am 30. November eine Punktlandung hin. Die Neuerungen sollen vor allem für mehr Klarheit sorgen. Außerdem ist wie bereits im Februar beschlossen Libsodium die Krypto-Bibliothek der Wahl, und die Macher haben die bereits in PHP 7.1 als überholt (deprecated) gekennzeichnete Libmcrypt entfernt. Darüber hinaus ist nun Argon2 der empfohlene Algorithmus zum Passwort-Hashing. Argon2 hatte 2015 die Password Hashing Competition (PHC) gewonnen.

Zu den sprachlichen Neuerungen gehört, dass Entwickler nun den object-Datentyp als Typehint, also vom System erwarteter Typ, verwenden dürfen. Damit gilt jedes beliebige von object abstammende Objekt als gültiger Wert, aber andere Werte wie Strings führen zu einem TypeError. Dasselbe gilt, wenn eine Methode den Typehint object als Rückgabewert besitzt, aber keinen Wert zurückgibt. Folgender Ausschnitt des Codes von der PHP-Site zeigt den Unterschied:

function acceptsObject(object $obj) { ... }

// This code can be statically analyzed to be correct
acceptsObject(new MyObject());

// This can be statically analysed to contain an error -> TypeError at runtime.
acceptsObject("Ceci n'est pas une object.");

Eine weitere Neuerung betrifft die Methode count(), um die Elemente eines Arrays oder innerhalb eines Objekts zu zählen. Bei Letzteren müssen Entwickler zur korrekten Verarbeitung das Countable-Interface implementieren. Allerdings geben Objekte, denen das Interface fehlt, schlicht den Wert 1 zurück. Das kann zu Missverständnissen und Fehlern führen.

In PHP 7.2 erzeugt ein Aufruf von count() auf ein Objekt ohne Countable-Interface zu einer Warnung. Um die Rückwärtskompatibilität zu gewährleisten, gibt die Methode jedoch weiterhin den Wert 1 zurück. Unabhängig von der Neuerung hat das Team das Countable-Interface aus der Standardbilbiothek SPL in den Core von PHP übernommen.

Mit einer Änderung will das Team einige problematische Fälle behandeln, die beim Umwandeln von object in array oder umgekehrt über settype() oder (object) beziehungsweise (array) auftreten. Vereinfacht ausgedrückt entsteht das Problem dadurch, dass sowohl object als auch array auf Schlüssel-Werte-Paare setzen, die aber unterschiedliche Einschränkungen haben. Bei array ist jeder Schlüssel entweder vom Typ Integer oder String, aber die Typen überlappen nie. Bei object kommen Properties zum Einsatz, die immer ein String sind. Intern verwenden sowohl object als auch array HashTables, bei denen jedoch durchaus eine Mischung aus Integer- und String-Schlüsseln erlaubt ist. So kann beispielsweise “123” auf einen anderen Wert verweisen als 123.

Im Interesse der möglichst besten Performance und Rückwärtskompatibilität besitzt die Zend-API nun die zusätzlichen Funktionen zend_symtable_to_proptable() zum Umwandeln einer array-artigen HashTable in eine object-artige und zend_proptable_to_symtable() für die entgegengesetzte Umwandlung.

Weitere Neuerungen in PHP 7.2 wie die verbesserten SSL/TLS-Konstanten lassen sich der offiziellen Ankündigung entnehmen. Die vollständige Liste der Änderungen und Bugfixes findet sich im ChangeLog. Das aktuelle Release der Skriptsprache steht zum Download bereit.


(rme)