In früheren Versionen konnte die Funktion
number_format() -0
zurückgeben. Dies
ist zwar für Gleitkommazahlen nach dem Standard IEEE-754 durchaus zulässig,
aber in Bezug auf die Formatierung der Zahlen in einer für den Menschen
lesbaren Form war diese Eigenart nicht wünschenswert.
<?php
var_dump(number_format(-0.01)); // gibt nun string(1) "0" anstelle von string(2) "-0" aus
Numerische Schlüssel werden nun besser behandelt, wenn Arrays in Objekte und Objekte in Arrays umgewandelt werden. Dies gilt nicht nur für explizite Umwandlungen, sondern auch für die Verwendung von settype().
Das bedeutet, dass auf die (zeichenkettenartigen) Integer-Schlüssel eines Arrays, das in ein Objekt umgewandelt wird, nun zugegriffen werden kann:
<?php
// Array zu Objekt
$arr = [0 => 1];
$obj = (object) $arr;
var_dump(
$obj,
$obj->{'0'}, // nun verfügbar
$obj->{0} // nun verfügbar
);
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
object(stdClass)#1 (1) { ["0"]=> // nun ein Zeichenketten-Schlüssel anstelle eines Integer-Schlüssels int(1) } int(1) int(1)
Genauso kann nun auf die (zeichenkettenartigen) Integer-Schlüssel eines Objekts, das in ein Array umgewandelt wird, zugegriffen werden:
<?php
// object to array
$obj = new class {
public function __construct()
{
$this->{0} = 1;
}
};
$arr = (array) $obj;
var_dump(
$arr,
$arr[0], // nun verfügbar
$arr['0'] // nun verfügbar
);
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(1) { [0]=> // nun ein Integer-Schlüssel anstelle eines Zeichenketten-Schlüssels int(1) } int(1) int(1)
null
an get_class()
Bisher wurde bei der Übergabe von null
an die Funktion
get_class() der Name der umschließenden Klasse
ausgegeben. Dieses Verhalten wurde nun entfernt und es wird stattdessen ein
Fehler der Stufe E_WARNING
ausgegeben. Um das
beschriebene Verhalten wiederherzustellen, sollte der Parameter einfach
weggelassen werden.
Wenn versucht wird, nicht zählbare Typen mittels count()
zu zählen, wird nun ein Fehler der Stufe E_WARNING
ausgegeben (dies gilt auch für die Alias-Funktion
sizeof()).
<?php
var_dump(
count(null), // NULL ist nicht zählbar
count(1), // Integer sind nicht zählbar
count('abc'), // Zeichenketten sind nicht zählbar
count(new stdClass), // Objeke, die die Countable-Schnittstelle nicht implementieren, sind nicht zählbar
count([1,2]) // Arrays sind zählbar
);
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d int(0) int(1) int(1) int(1) int(2)
Als Teil der langfristigen Umstellung weg von Ressourcen wurde die Erweiterung Hash dahingehend überarbeitet, dass nun Objekte anstelle von Ressourcen verwendet werden. Die Änderung sollte für PHP-Entwickler problemlos vonstatten gehen, mit Ausnahme der Fälle, in denen Überprüfungen mit der Funktion is_resource() durchgeführt werden (diese müssen auf is_object() umgestellt werden).
Folgendes wurde an den Standardeinstellungen geändert:
tls://
ist nun standardmäßig auf TLSv1.0 oder TLSv1.1
oder TLSv1.2 eingestellt
ssl://
ist nun ein Alias für tls://
STREAM_CRYPTO_METHOD_TLS_*
-Konstanten sind nun
standardmäßig auf TLSv1.0 oder TLSv1.1 + TLSv1.2 eingestellt, statt nur
auf TLSv1.0
Bisher gab gettype() bei einer geschlossenen Ressource
die Zeichenkette "unknown type"
zurück. Nun wird die
Zeichenkette "resource (closed)"
zurückgegeben.
Bisher gab die Funktion is_object() bei der Klasse
__PHP_Incomplete_Class false
zurück. Nun gibt sie
true
zurück.
Unvollständig definierte Referenzen auf undefinierte Konstanten erzeugen
nun einen Fehler der Stufe E_WARNING
(statt
E_NOTICE
). In der nächsten Hauptversion von PHP werden
sie Error-Exceptions auslösen.
Die derzeit niedrigsten offiziell unterstützten Windows-Version sind Windows 7/Server 2008 R2.
Bei Kompatibilitätsprüfungen von Standard-Eigenschaftswerten von Traits werden nun keine Typumwandlungen mehr durchgeführt.
object
als Klassenname
Die Bezeichnung object
war in PHP 7.0 bisher weich
reserviert. Nun ist sie hart reserviert, d. h., sie kann nicht mehr als
Name für Klassen, Traits oder Schnittstellen verwendet werden.
Die Unterstützung für NetWare wurde entfernt.
SORT_STRING
Während array_unique() mit
SORT_STRING
früher das Array kopiert und nicht
eindeutige Elemente entfernt hat (ohne das Array anschließend zu packen),
wird nun ein neues Array erstellt, das aus den eindeutigen Elementen
besteht. Dies kann zu unterschiedlichen numerischen Indizes führen.
Die Funktion bcmod() reduziert Gleitkommazahlen nicht
mehr auf Ganzzahlen. Daher entspricht ihr Verhalten nun der Funktion
fmod() und nicht mehr dem Operator %
.
Zum Beispiel liefert bcmod('4', '3.5')
nun
0.5
anstelle von 1
.
Die Funktionen hash_hmac(),
hash_hmac_file(), hash_pbkdf2() und
hash_init() (mit HASH_HMAC
)
akzeptieren keine nicht-kryptographischen Hashes mehr.
Wenn bei der Funktion json_decode() der zweite Parameter
(assoc) null
ist, wird nun die Funktionsoption
JSON_OBJECT_AS_ARRAY
verwendet. Zuvor wurde
JSON_OBJECT_AS_ARRAY
immer ignoriert.
Die Sequenzen, die von den Funktionen rand() und mt_rand() für einen bestimmten Seed erzeugt werden, können sich auf 64-Bit-Systemen von den in PHP 7.1 erzeugten unterscheiden (aufgrund eines behobenen Modulo-Bias-Fehlers in der Implementierung).
sql.safe_mode
entfernt
Die INI-Einstellung sql.safe_mode
wurde entfernt.
Das Element zone
des Arrays, das von den Funktionen
date_parse() und
date_parse_from_format() zurückgegeben wird, zeigt nun
Sekunden anstelle von Minuten, und sein Vorzeichen wurde umgedreht. So wird
zum Beispiel -120
nun zu 7200
.
Seit PHP 7.2.34 werden die Namen eingehender Cookies aus Sicherheitsgründen nicht mehr URL-dekodiert.