navios

Ihr Partner für’s Web

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).