Neue Features
PHP-Kern
Flexiblere Heredoc- und Nowdoc-Syntax
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 (Zerlegung) von Arrays unterstützt Referenzzuweisungen
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 Literale
Der Operator instanceof
akzeptiert nun ein Literal als
ersten Operanden. In diesem Fall gibt das Ergebnis immer false
zurück.
CompileError-Exception anstelle von Kompilierungsfehlern
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.
Komma am Ende von Aufrufen erlaubt
Am Ende von Funktions- und Methodenaufrufen sind nun Kommas erlaubt.
Unterstützung für Argon2id
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.
FastCGI-Prozessmanager (FPM)
Es wurden neue Optionen zur Anpassung der FPM-Protokollierung hinzugefügt:
-
log_limit
- Diese globale Option wird verwendet, um die maximale Textlänge für die Protokollierung festzulegen, sodass es möglich ist, mehr als 1024 Zeichen ohne Zeilenumbrüche zu protokollieren. Dadurch werden auch verschiedene Probleme mit Zeilenumbrüchen behoben.
-
log_buffering
- Diese globale Option ermöglicht eine experimentelle Protokollierung ohne zusätzliche Pufferung.
-
decorate_workers_output
-
Wenn
catch_workers_output
aktiviert ist, kann diese Pool-Option verwendet werden, um die Dekoration der Worker-Ausgabe zu deaktivieren.
BCMath-Funktionen
Die Funktion bcscale() kann nun auch als "Getter" verwendet werden, um die aktuell verwendete Genauigkeit abzurufen.
Lightweight Directory Access Protocol (LDAP)
Die LDAP-Abfragefunktionen und die Funktion ldap_parse_result() unterstützen nun sämtliche Steuerelemente von LDAP:
-
Um Steuerbefehle an den Server senden zu können, wurde den Funktionen
ldap_add(), ldap_mod_replace(),
ldap_mod_add(), ldap_mod_del(),
ldap_rename(), ldap_compare(),
ldap_delete(), ldap_modify_batch(),
ldap_search(), ldap_list() und
ldap_read() der Parameter
$serverctrls
hinzugefügt. -
Um Steuerbefehle vom Server abrufen zu können wurde der Funktion
ldap_parse_result() der Parameter
$serverctrls
hinzugefügt. -
In den Funktionen ldap_get_option() und
ldap_set_option() wurde die Unterstützung für
LDAP_OPT_SERVER_CONTROLS
undLDAP_OPT_CLIENT_CONTROLS
korrigiert.
Multibyte-Zeichenketten-Funktionen
Vollständige Unterstützung für Case-Mapping und Case-Folding
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)
Operationen, die Groß-/Kleinschreibung nicht berücksichtigen, verwenden Case-Folding
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_CASE_TITLE führt eine Title-Case-Umwandlung durch
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.
Unterstützung für Unicode 11
Die Datentabellen für Multibyte-Zeichenketten wurden aktualisiert, um Unicode 11 zu unterstützen.
Unterstützung für lange Zeichenketten
Die Funktionen für Multibyte-Zeichenketten unterstützen nun auch Zeichenketten, die größer als 2GB sind.
Verbesserung der Leistung
Die Leistung der Erweiterung Multibyte-Zeichenketten wurde in allen Bereichen erheblich verbessert. Die größten Verbesserungen betreffen die Funktionen zur Umwandlung der Groß-/Kleinschreibung.
Unterstützung für benannte Übereinstimmungen
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.
Readline
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.