PHP 7.2 veröffentlicht
Heute wurde mit Version 7.2 das zweite Feature-Update im PHP 7 Zweig veröffentlicht. Neben den obligatorischen Bugfixes wartet die neue Ausgabe mit einer Reihe kleinerer Änderungen und Erweiterungen auf. Eine detaillierte Auflistung findet sich in der Änderungshistorie.
Numerische Schlüssel bei object
/array
Umwandlungen
Aufgrund der internen Handhabung von Array-Schlüsseln und Object-Properties konnte es bisher bei der Umwandlung zwischen beiden Typen zu nicht erreichbaren Werten führen:
$arrSrc = [1 => "foo"]; $obj = (object)$arrSrc; var_dump($obj); // ⇒ object(stdClass)#1 (1) { // [1] => string(3) "foo" // } print $obj->{1}; // ⇒ Notice: Undefined property print $obj->{"1"}; // ⇒ Notice: Undefined property
$objSrc = new stdClass; $objSrc->{"1"} = "bar"; $arr = (array)$objSrc; var_dump($arr); // ⇒ array(1) { // ["1"] => string(3) "bar" // } print $arr[1]; // ⇒ Notice: Undefined offset print $arr["1"]; // ⇒ Notice: Undefined offset
In PHP 7.2 werden numerische Schlüssel nun konvertiert (RFC), sodass die Werte aus obigem Beispiel folgendermaßen erreichbar sind:
var_dump($obj); // ⇒ object(stdClass)#1 (1) { // ["1"] => string(3) "foo" // } print $obj->{1}; // ⇒ "foo" print $obj->{"1"}; // ⇒ "foo"
var_dump($arr); // ⇒ array(1) { // [1] => string(3) "bar" // } print $arr[1]; // ⇒ "bar" print $arr["1"]; // ⇒ "bar"
count()
bei Objekten ohne Countable
-Interface
Objekte, die das Countable
-Interface nicht implementiert haben, gaben bisher bei Anwendung der count()
Methode stets „1“ zurück:
$obj = new stdClass; print count($obj); // ⇒ 1
Aus Gründen der Rückwärtskompatibilität bleibt dies zwar weiterhin der Fall, es wird aber auch eine Warnung ausgegeben (RFC):
$obj = new stdClass; print count($obj); // ⇒ PHP Warning: count(): Parameter must be an // array or an object that implements Countable // ⇒ 1
object
-Typdeklaration
Der Datentyp object
kann nun sowohl beim Funktionsparametern, als auch für Rückgabewerte als Typehint verwendet werden (RFC). Ist der Wert zur Laufzeit falsch, so wird eine TypeError-Exception geworfen. Beispiel-Code:
function acceptsObject(object $obj) { // ... } function returnsObject() : object { return new stdClass(); }
Argon2 Passwort Hashing
Die Funktion password_hash()
beherrscht nun das Passwort Hashing Verfahren Argon2, das bei der Password Hashing Competition im Juli 2015 gewonnen hat (RFC). Beispiel:
password_hash("password", PASSWORD_ARGON2I);
TLS Konstanten
Die SSL/TLS Konstanten wurden auf sichere Werte gesetzt (RFC).
Mcrypt Erweiterung entfernt
Erweiterung Die nicht mehr gepflegte Mcrypt Erweiterung wurde vom PHP Kern entfernt zur PECL verschoben (RFC).
Neue Sodium Erweiterung
Im Gegenzug wurde Libsodium, eine moderne Kryptographiebibliothek, in den PHP Kern aufgenommen (RFC).