Nach einem Jahr Entwicklung Veröffentlichung der Programmiersprache . Der neue Branch umfasst eine Reihe neuer Funktionen sowie einige Änderungen, die die Kompatibilität beeinträchtigen.
Schlüssige in PHP 7.4:
- – Klassen-Eigenschaften können nun Typdeklarationen enthalten, zum Beispiel:
class User {
public int $id;
public string $name;
} - Funktionsdefinitionssyntax „fn(parameter_list) => expr“ mit Wertbindung des Geltungsbereichs. Zum Beispiel „fn($x) => $x + $y“ ist das Äquivalent zu „$fn2 = function ($x) use ($y) {return $x + $y;}“;
- „??=“, der verwendet werden kann, um einen Standardwert festzulegen („a ??= b“ entspricht „a = a ?? b“, wenn „a“ definiert ist, wird dessen Wert beibehalten, andernfalls wird „b“ zugewiesen);
- Eingeschränkte Beibehaltung der Vererbungshierarchie von Typen in abgeleiteten Rückgabewerten oder die Möglichkeit, die Hierarchie der grundlegenden Typen in den abgeleiteten Argumenttypen umzukehren ( Rückgabetyp und kontravariante Argumenttypen). In PHP können jetzt folgende Konstrukte verwendet werden:
class A {}
class B extends A {}class Producer {
public function method(): A {}
}
class ChildProducer extends Producer {
public function method(): B {}
} - Der Unpacker-Operator innerhalb von Arrays „…$var“ die Substitution vorhandener Arrays bei der Definition eines neuen Arrays;
$parts = [‘apple’, ‘pear’];
$fruits = [‘banana’, ‘orange’, …$parts, ‘watermelon’];
// [‘banana’, ‘orange’, ‘apple’, ‘pear’, ‘watermelon’]; - anschauliche Darstellung großer Zahlen mit Trennzeichen in numerischen Literalen (1_000_000_00);
- Support , die es ermöglichen, eine Referenz auf ein Objekt zu halten, ohne die Löschung des zugehörigen Objekts durch den Garbage Collector zu blockieren;
- Neu zur Serialisierung von Objekten (Kombination aus Serializable und __sleep()/__wakeup()), der das Interface Serializable ersetzt, das als veraltet angesehen wird;
// Возвращает массив, содержащий все состояния объекта;
public function __serialize(): array;// Восстанавливает состояние объекта из массива
public function __unserialize(array $data): void; - Die Generierung von Ausnahmen aus der Methode ;
- Unterstützung für die vorzeitige Cache-Ladung des Objektcodes hinzugefügt. Um dies einzustellen, wurde der Parameter
, über den Sie ein PHP-Skript angeben können, das beim Starten des Servers kompiliert und ausgeführt wird. Dieses Skript kann Opcode anderer Dateien über deren direkte Einbindung oder die Funktion opcache_compile_file(); laden. - Die Hash-Erweiterung hat die Funktion crc32c hinzugefügt, um Prüfziffern mithilfe des Castagnoli-Polynoms zu berechnen;
- Die Funktion password_hash() unterstützt jetzt die Passwort-Hashing-Methoden argon2i und argin2id in der Sodium-Bibliothek, wenn PHP ohne libargon kompiliert wird;
- Die Funktion mb_str_split() wurde hinzugefügt, die analog zu str_split() funktioniert, jedoch nicht mit Bytes, sondern mit den Positionen von Zeichen in einer mehrbytigen Zeichenkette arbeitet;
- Die Funktion strip_tags() wurde um die Möglichkeit erweitert, ein Array von Tag-Namen zu übergeben. Statt strip_tags($str, '...') kann jetzt strip_tags($str, ['a', 'p']); verwendet werden.<a><p>’) jetzt kann strip_tags($str, [‘a’, ‘p’]); angegeben werden.
- In proc_open() wurde die Möglichkeit eingeführt, Operanden in einem Array aufzulisten, anstatt eine Startzeichenfolge anzugeben, und es wurde die Möglichkeit zur Umleitung von Streams sowie Unterstützung für einen Null-Dateideskriptor implementiert;
proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);
// Как 2>&1 в shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);// как 2>/dev/null или 2>nul в shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes); - Die Erweiterungen Firebird/Interbase, Recode und WDDX sind aus der Basisauslieferung entfernt worden. Diese Erweiterungen werden jetzt über PECL verteilt;
- In den Status Funktionen wie verschachtelte ternäre Operatoren ohne Klammern, Zugriff auf Array-Elemente und Strings mit geschweiften Klammern („$var{$idx}“), die Funktion is_real() und Typumwandlung zu real, die Verwendung des Schlüsselworts parent ohne übergeordnete Klasse, die Konfigurationsoption allow_url_include und die Anwendung von array_key_exists() auf Objekten wurden eingeführt.
Die Funktionen get_magic_quotes_gpc(), get_magic_quotes_runtime() sind als veraltet deklariert.
hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().Es wird eine Warnung ausgegeben, wenn versucht wird, veraltete Funktionen zu verwenden, um ungültige Zeichen in den Funktionen
base_convert(), bindec(), octdec() und hexdec() zu verarbeiten, sowie wenn ein nicht-stringbasiertes Muster in mb_ereg_replace() angegeben wird.
Quelle: opennet.ru
