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:

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
?>
In mb_convert_case() stehen verschiedene Modi für die Umwandlung und zum Vergleich von Groß- und Kleinschreibung zur Verfügung:
  • 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)
Es wird nur uneingeschränktes und sprachunabhängiges vollständiges Case-Mapping durchgeführt.

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" => "国"];
?>
Außerdem unterstützt mb_ereg_replace() nun die Notationen \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.

add a note

User Contributed Notes 1 note

up
7
yoander dot valdes at yahoo dot com
3 years ago
"Trailing commas in function and method calls are now allowed" means function parameters, example:

<?php

function my1() {
        echo
"xxxxxx\n";
}

function
my2() {
        echo
"yyyyyy\n";
}

my1(),my2(); // PHP Parse error:  syntax error

my1(,); // PHP Parse error:  syntax error

my1(1,); my2(2,); // OK

?>
To Top