Das Paket mit kurzem Verschluss ermöglicht prägnanteres einzeiliges Schreiben.
array_map(function (User $user) { return $user->id; }, $users)
Einige Hinweise zu kurzen Schließungen:
use
erforderlich. $this
kann wie ein normaler Verschluss verwendet werden. return
-Anweisung. Sie können sie hier ausführlich lesen.
Klassenattribut kann den Typ anfordern:
array_map(fn(User $user) => $user->id, $users)
Ich habe bereits über das Typsystem von PHP geschrieben, daher ist es schön zu sehen, dass einige grundlegende PHP-Verbesserungen vorgenommen werden.
Typunterschiede sind ein Thema, das einen Blogbeitrag wert ist: Sie können kovariate Rückgabetypen verwenden. . .
class A { public string $name; public Foo $foo; }
. . . und inverse Variablen.
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
Muss dies nicht mehr tun:
class A { public function contraVariantArguments(ChildType $type) { /* … */ } } class B extends A { public function contraVariantArguments(ParentType $type) { /* … */ } }
Sie können dies tun:
$data['date'] = $data['date'] ?? new DateTime();
Jetzt können Sie den Spread-Operator mit Arrays verwenden:
$data['date'] ??= new DateTime();
Beachten Sie, dass dies nur für Arrays mit numerischen Schlüsseln funktioniert.
Foreign Function Interface, kurz FFI, ermöglicht den Aufruf von C-Code aus dem Userland. Das bedeutet, dass PHP-Erweiterungen in reinem PHP geschrieben werden können.
Es sollte beachtet werden, dass es sich um ein komplexes Thema handelt. Um diese Funktion korrekt nutzen zu können, benötigen Sie noch C-Kenntnisse.
Vorladen ist eine aufregende neue Funktion im Kern von PHP, die unvorhersehbare Leistungsverbesserungen bringen kann.
Kurz gesagt: Wenn Sie heute ein Framework verwenden, müssen dessen Dateien bei jeder Anfrage geladen und neu kompiliert werden. Durch das Vorladen kann der Server PHP-Dateien beim Start in den Speicher laden und sie für alle nachfolgenden Anforderungen persistent machen (solange kein Stromausfall vorliegt).
Natürlich hat die Leistungsverbesserung ihren Preis: Wenn sich die Quelldatei der vorinstallierten Datei ändert, muss der Server neu gestartet werden (wenn Sie Einwände gegen diesen Teil haben, lesen Sie bitte die RFC für Details)
RFC fügt zwei neue magische Methoden hinzu: __serialize
und __unserialize
. Die Unterschiede zwischen diesen Methoden und __sleep
und __wakeup
werden im RFC besprochen.
Wenn Sie etwas schreiben würden wie:
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]
PHP würde es so kompilieren:
echo "sum: " . $a + $b;
Und PHP 8 lässt es wie folgt kompilieren:
echo ("sum: " . $a) + $b;
Wenn ein „.“ vor einem „+“- oder „-“-Ausdruck ohne Klammern auftritt, wird PHP 7.4 eine Warnung zum Abbruch der Verwendung auslösen.
Dies ist technisch gesehen kein PHP 7.4-bezogenes Update, aber es ist erwähnenswert: Die Abstimmungsregeln für RFCs haben sich geändert.
Bibliotheken wie der Var-Dumper von Symfony verlassen sich stark auf die Reflection-API, um Variablen zuverlässig zu sichern. Zuvor gab es keine ordnungsgemäße Reflexionsunterstützung für Referenzen, was dazu führte, dass diese Bibliotheken bei der Erkennung von Reflexionen auf Hacker angewiesen waren.
PHP 7. 4 hat eine ReflectionReference
-Klasse hinzugefügt, um dieses Problem zu lösen.
mb_str_split
函数 RFC
此函数提供与 str_split
多字节字符串相同的功能。
ext-hash
RFC
正如标题所说,此扩展现在可在所有 PHP 安装中永久支持使用。
由于 PEAR 不再支持维护,核心团队决定在 PHP 7.4 中删除它的默认安装。
对如何使用散列库进行内部更改,以便用户可以更轻松地使用它们。
ext/wwdx
RFC
此数据交换格式从未标准化,现在已经弃用该扩展。
短开标签 <?
已被弃用,将在 PHP 8 中删除。短声明标记 <?=
不受影响。
三元运算符在 PHP 中有一些奇怪的怪癖。此 RFC 为嵌套的三元语句添加了弃用。在 PHP 8 中,此弃用将转换为编译时错误。
1 ? 2 : 3 ? 4 : 5; // deprecated (1 ? 2 : 3) ? 4 : 5; // ok
升级PHP版本时,您应该始终查看完整的 UPGRADING 文档。
以下是一些突出显示的向后不兼容的更改:
var_dump
一个 DateTime
或 DateTimeImmutable
实例后面将不再保留对象的可访问属性。openssl_random_pseudo_bytes
将在错误情况下抛出异常。PDO
或 PDOStatement
实例将生成一个 Exception
而不是一个 PDOException
。调用 get_object_vars()
上的 ArrayObject
实例将返回的属性 ArrayObject
本身,而不是包装的数组或对象的值。请注意,(array)
强制转换不受影响。
更多PHP相关技术文章,请访问PHP教程栏目进行学习!
Das obige ist der detaillierte Inhalt vonErfahren Sie in drei Minuten mehr über die neuen Funktionen von PHP 7.4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!