Auf den schließenden Bezeichner für doc-Zeichenketten muss kein Semikolon oder Zeilenumbruch mehr folgen. Außerdem darf der schließende Bezeichner eingerückt sein; in diesem Fall wird die Einrückung aus allen Zeilen der doc-Zeichenkette entfernt.
Die Destrukturierung von Arrays unterstützt nun mithilfe der Syntax
[&$a, [$b, &$c]] = $d
Referenzzuweisungen. Dies
wird auch bei list() unterstützt.
Der Operator instanceof
akzeptiert nun ein Literal als
ersten Operanden. In diesem Fall gibt das Ergebnis immer false
zurück.
Es wurde eine neue CompileError-Exception
hinzugefügt, von der ParseError erbt. Eine kleine
Anzahl von Kompilierungsfehlern löst nun eine
CompileError-Exception aus, anstatt einen fatalen
Fehler zu erzeugen. Derzeit betrifft dies nur Kompilierungsfehler, die von
token_get_all() im Modus
TOKEN_PARSE
ausgelöst werden können, aber in Zukunft
könnten weitere Fehler in diese Exception konvertiert werden.
Am Ende von Funktions- und Methodenaufrufen sind nun Kommas erlaubt.
Mit der Konfigurationsoption
--with-password-argon2[=dir]
unterstützen die Funktionen password_hash(),
password_verify(),
password_get_info() und
password_needs_rehash() nun Argon2i- und
Argon2id-Hashes. Passwörter können gehasht und mit der Konstante
PASSWORD_ARGON2ID
verifiziert werden. Um die
Unterstützung für Argon2i und Argon2id in den
password_*()-Funktionen nutzen zu können, muss PHP
gegen die libargon2-Referenzbibliothek ≥ 20161029 gelinkt sein.
Es wurden neue Optionen zur Anpassung der FPM-Protokollierung hinzugefügt:
log_limit
log_buffering
decorate_workers_output
catch_workers_output
aktiviert ist, kann diese
Pool-Option verwendet werden, um die Dekoration der Worker-Ausgabe zu
deaktivieren.
Die Funktion bcscale() kann nun auch als "Getter" verwendet werden, um die aktuell verwendete Genauigkeit abzurufen.
Die LDAP-Abfragefunktionen und die Funktion ldap_parse_result() unterstützen nun sämtliche Steuerelemente von LDAP:
$serverctrls
hinzugefügt.
$serverctrls
hinzugefügt.
LDAP_OPT_SERVER_CONTROLS
und
LDAP_OPT_CLIENT_CONTROLS
korrigiert.
Die Unterstützung für die vollständige Umwandlung und den Vergleich von Groß- und Kleinschreibung wurde hinzugefügt. Im Gegensatz zur einfachen Umwandlung der Groß-/Kleinschreibung kann die vollständige Umwandlung die Länge der Zeichenkette ändern. Zum Beispiel:
<?php
mb_strtoupper("Straße");
// Ergibt in PHP 7.2 STRAßE
// Ergibt in PHP 7.3 STRASSE
?>
MB_CASE_LOWER
(wird verwendet von
mb_strtolower())
MB_CASE_UPPER
(wird verwendet von
mb_strtoupper())
MB_CASE_TITLE
MB_CASE_FOLD
MB_CASE_LOWER_SIMPLE
MB_CASE_UPPER_SIMPLE
MB_CASE_TITLE_SIMPLE
MB_CASE_FOLD_SIMPLE
(wird bei Operationen
verwendet, die Groß- und Kleinschreibung nicht berücksichtigen)
Bei Operationen mit Zeichenketten, die die Groß-/Kleinschreibung nicht berücksichtigen, wird nun Case-Folding anstelle von Case-Mapping verwendet. Das bedeutet, dass mehr Zeichen als gleich (ohne Berücksichtigung der Groß-/Kleinschreibung) angesehen werden.
mb_convert_case() führt in Verbindung mit
MB_CASE_TITLE
nun eine Title-Case-Umwandlung durch,
die auf den von Cased und CaseIgnorable abgeleiteten Unicode-Eigenschaften
basiert. Diese Änderung verbessert insbesondere auch die Behandlung von
Anführungszeichen und Apostrophen.
Die Datentabellen für Multibyte-Zeichenketten wurden aktualisiert, um Unicode 11 zu unterstützen.
Die Funktionen für Multibyte-Zeichenketten unterstützen nun auch Zeichenketten, die größer als 2GB sind.
Die Leistung der Erweiterung Multibyte-Zeichenketten wurde in allen Bereichen erheblich verbessert. Die größten Verbesserungen betreffen die Funktionen zur Umwandlung der Groß-/Kleinschreibung.
Die mb_ereg_*
-Funktionen unterstützen nun benannte
Übereinstimmungen. Funktionen, die wie mb_ereg() nach
Übereinstimmungen suchen, geben nun ähnlich wie die Funktionen bei PCRE
benannte Übereinstimmungen zurück, indem sie sowohl ihre Gruppennummern
als auch ihre Namen verwenden:
<?php
mb_ereg('(?<word>\w+)', '国', $matches);
// => [0 => "国", 1 => "国", "word" => "国"];
?>
\k<>
und \k''
, um benannte
Übereinstimmungen in der Ersetzungszeichenkette zu referenzieren:
<?php
mb_ereg_replace('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo ');
// => "_foo_foo_"
?>
\k<>
und \k''
können auch für numerische
Verweise verwendet werden, was auch mit Gruppennummern funktioniert, die
größer als 9 sind.
Bei der Funktion readline_info() wurde die Unterstützung
für die Optionen completion_append_character
und
completion_suppress_append
hinzugefügt. Diese Optionen
sind nur verfügbar, wenn PHP gegen libreadline (statt libedit) gelinkt ist.