Le package de fermeture courte permet une écriture plus concise sur une seule ligne.
array_map(function (User $user) { return $user->id; }, $users)
Quelques notes sur les fermetures courtes :
use
n'est requis. $this
peut être utilisé comme une fermeture normale. return
. Vous pouvez les lire en profondeur ici.
L'attribut de classe peut demander le type :
array_map(fn(User $user) => $user->id, $users)
J'ai déjà écrit sur le système de types de PHP, donc c'est agréable de voir certains éléments de base de PHP être améliorés.
Les différences de types sont un sujet digne d'un article de blog en bref : vous pourrez utiliser des types de retour covariables ; . .
class A { public string $name; public Foo $foo; }
. . . et variables inverses.
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
Plus besoin de faire ceci :
class A { public function contraVariantArguments(ChildType $type) { /* … */ } } class B extends A { public function contraVariantArguments(ParentType $type) { /* … */ } }
Vous pouvez faire ceci :
$data['date'] = $data['date'] ?? new DateTime();
Vous pouvez désormais utiliser l'opérateur de propagation avec des tableaux :
$data['date'] ??= new DateTime();
Notez que cela ne fonctionne que pour les tableaux avec des touches numériques.
Foreign Function Interface, ou FFI en abrégé, permet d'appeler du code C depuis l'espace utilisateur. Cela signifie que les extensions PHP peuvent être écrites en PHP pur.
Il convient de noter qu’il s’agit d’un sujet complexe. Vous avez toujours besoin de connaissances en C pour utiliser correctement cette fonctionnalité.
Le préchargement est une nouvelle fonctionnalité intéressante au cœur de PHP qui peut apporter des améliorations de performances imprévisibles.
En bref : si vous utilisiez un framework aujourd'hui, il faudrait que ses fichiers soient chargés et recompilés à chaque requête. Le préchargement permet au serveur de charger les fichiers PHP en mémoire au démarrage et de les rendre persistants et disponibles pour toutes les requêtes ultérieures (tant qu'il n'y a pas de coupure de courant).
Bien sûr, l'amélioration des performances a un prix : si le fichier source du fichier préchargé change, le serveur doit être redémarré (si vous avez des objections à cette partie, veuillez consulter la RFC pour plus de détails)
RFC ajoute deux nouvelles méthodes magiques : __serialize
et __unserialize
. Les différences entre ces méthodes et __sleep
et __wakeup
sont discutées dans la RFC.
Si vous écriviez quelque chose comme :
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]
PHP le compilerait comme ceci :
echo "sum: " . $a + $b;
Et PHP 8 le fera compiler comme suit :
echo ("sum: " . $a) + $b;
Lorsque vous rencontrez un '.' avant une expression '+' ou '-' sans parenthèses, PHP 7.4 affichera un avertissement d'abandon d'utilisation.
Ceci n'est techniquement pas une mise à jour liée à PHP 7.4, mais il convient de le mentionner : les règles de vote pour les RFC ont changé.
Les bibliothèques comme le var dumper de Symfony s'appuient fortement sur l'API de réflexion pour vider les variables de manière fiable. Auparavant, il n'existait pas de support de réflexion approprié pour les références, ce qui faisait que ces bibliothèques s'appuyaient sur des pirates pour détecter les réflexions.
PHP 7. 4 a ajouté une classe ReflectionReference
pour résoudre ce problème.
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教程栏目进行学习!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!