Maison >développement back-end >tutoriel php >Découvrez les nouvelles fonctionnalités de PHP 7.4 en trois minutes

Découvrez les nouvelles fonctionnalités de PHP 7.4 en trois minutes

步履不停
步履不停original
2019-06-25 14:29:206333parcourir

Découvrez les nouvelles fonctionnalités de PHP 7.4 en trois minutes

Nouvelles fonctionnalités de PHP 7.4

  • La date de sortie pourrait être vers décembre 2019, encore à confirmer
  • Fermetures courtes, permet plus Écriture concise sur une seule ligne
  • Préchargement pour améliorer les performances
  • Attributs de type dans les classes
  • Sérialisation d'objet personnalisée Ajoute un objet (dé)sérialisé Nouvelles méthodes
  • Amélioration différences de type
  • Opérateur de coalescence Null simplifié
  • FFI ouvre de nouvelles opportunités pour le développement d'extensions PHP
  • Balises ouvertes courtes obsolètes
  • Prise en charge de l'opérateur de propagation dans les tableaux
  • Lisez ci-dessous pour en savoir plus

Fermeture courteRFC

Le package de fermeture courte permet une écriture plus concise sur une seule ligne.

array_map(function (User $user) { 
    return $user->id; 
}, $users)
rrree

Quelques notes sur les fermetures courtes :

  • a accès à la portée parent, aucun mot-clé use n'est requis.
  • $this peut être utilisé comme une fermeture normale.
  • Une courte fermeture ne peut contenir qu'une seule ligne, qui est la déclaration return.

Vous pouvez les lire en profondeur ici.

Attribut de type RFC

L'attribut de classe peut demander le type :

array_map(fn(User $user) => $user->id, $users)

Différence de type amélioréeRFC

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
    { /* … */ }
}

Opérateur de coalescence nulRFC

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();

Array Opérateur de propagation RFC

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 RFC

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é.

Préchargement RFC

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)

Sérialisation d'objets personnalisés RFC

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.

Priorité de connexionRFC

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.

Améliorations du processus de vote des RFC

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é.

  • Ils auront toujours besoin du soutien d’une majorité des 2/3 pour passer.
  • Le temps de vote n'est pas court, tous les RFC doivent être ouverts depuis au moins 2 semaines.

Réflexions sur les références RFC

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 EXTERNALS

由于 PEAR 不再支持维护,核心团队决定在 PHP 7.4 中删除它的默认安装。

密码哈希注册表RFC

对如何使用散列库进行内部更改,以便用户可以更轻松地使用它们。

弃用ext/wwdx RFC

此数据交换格式从未标准化,现在已经弃用该扩展。

PHP 短标签被弃用 RFC

短开标签 <? 已被弃用,将在 PHP 8 中删除。短声明标记 <?= 不受影响。

左关联三元运算符被弃用 RFC

三元运算符在 PHP 中有一些奇怪的怪癖。此 RFC 为嵌套的三元语句添加了弃用。在 PHP 8 中,此弃用将转换为编译时错误。

1 ? 2 : 3 ? 4 : 5;   // deprecated
(1 ? 2 : 3) ? 4 : 5; // ok

向后不兼容的更改 UPGRADING

升级PHP版本时,您应该始终查看完整的 UPGRADING 文档。

以下是一些突出显示的向后不兼容的更改:

  • 调用 var_dump 一个 DateTimeDateTimeImmutable 实例后面将不再保留对象的可访问属性。
  • openssl_random_pseudo_bytes 将在错误情况下抛出异常。
  • 尝试序列化一个 PDOPDOStatement 实例将生成一个 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn