Maison > titres > le corps du texte

Le passionnant PHP7.4

藏色散人
Libérer: 2019-09-30 18:07:21
avant
10566 Les gens l'ont consulté

Le passionnant PHP7.4

PHP 7.4 est la prochaine version mineure de PHP 7 et devrait être mise en disponibilité générale le 28 novembre 2019. Jetons un coup d'œil aux nouvelles fonctionnalités de PHP 7.4 qui rendront PHP plus rapide et plus fiable.

Bien sûr, j'attends avec impatience PHP 8. Étant donné que certaines propositions de JIT ont été approuvées, cela pourrait devenir une autre étape importante pour PHP.

Quoi de neuf en PHP avec PHP 7.4 ?

● Prend en charge le décompression dans les tableaux - opérateur de propagation de tableau

● Fonction flèche 2.0 (fermeture plus courte)

PHP 7.4 dans les tableaux L'opérateur Spread

est introduit dans les expressions et est disponible depuis PHP 5.6. Déballage des paramètres est une syntaxe pour décompresser des tableaux et Traversable dans des listes de paramètres. Pour décompresser un Array ou Traversable, il doit être préfixé par ... (3 points), comme dans l'exemple suivant :

  function test(...$args) { var_dump($args); }
  test(1, 2, 3);
Copier après la connexion

Cependant, PHP 7.4 RFC recommande d'étendre cette fonctionnalité aux tableaux Définition :

  $arr = [...$args];
Copier après la connexion

Le premier avantage de l'opérateur Spread est la performance, et la documentation RPC indique que l'opérateur :

Spread devrait avoir de meilleures performances que array_merge. Ce n'est pas seulement que l'opérateur spread est une construction syntaxique et que array_merge est une méthode. Également au moment de la compilation, les tableaux constants sont optimisés pour une efficacité élevée. Un avantage significatif de l'opérateur

Spread est qu'il prend en charge tout objet traversable, alors que la fonction array_merge ne prend en charge que les tableaux.

Voici un exemple de paramètres dans un tableau avec l'opérateur Spread :

   $parts = ['apple', 'pear'];
  $fruits = ['banana', 'orange', ...$parts, 'watermelon'];
  var_dump($fruits);
Copier après la connexion

Si vous exécutez ce code dans PHP 7.3 ou une version antérieure, PHP générera une erreur d'analyse :

Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']' in /app/spread-operator.php on line 3
Copier après la connexion

Au lieu de cela, PHP 7.4 renverra un tableau

array(5) {
    [0]=>
    string(6) "banana"
    [1]=>
    string(6) "orange"
    [2]=>
    string(5) "apple"
    [3]=>
    string(4) "pear"
    [4]=>
    string(10) "watermelon"
  }
Copier après la connexion

La RFC indique que nous pouvons étendre le même tableau plusieurs fois. De plus, nous pouvons utiliser la syntaxe Spread Operator n'importe où dans le tableau puisque des éléments réguliers peuvent être ajoutés avant ou après l'opérateur spread. Par conséquent, le code suivant fonctionnera comme prévu :

$arr1 = [1, 2, 3];
  $arr2 = [4, 5, 6];
  $arr3 = [...$arr1, ...$arr2];
  $arr4 = [...$arr1, ...$arr3, 7, 8, 9];
Copier après la connexion

Il est également possible de passer le tableau renvoyé par la fonction en paramètre et de le mettre dans un nouveau tableau :

function buildArray(){
    return ['red', 'green', 'blue'];
  }
  $arr1 = [...buildArray(), 'pink', 'violet', 'yellow'];
Copier après la connexion

Sorties PHP 7.4 le tableau suivant :

array(6) {
    [0]=>
    string(3) "red"
    [1]=>
    string(5) "green"
    [2]=>
    string(4) "blue"
    [3]=>
    string(4) "pink"
    [4]=>
    string(6) "violet"
    [5]=>
    string(6) "yellow"
  }
Copier après la connexion

On peut aussi utiliser generator :

function generator() {
    for ($i = 3; $i <= 5; $i++) {
        yield $i;
    }
  }
  $arr1 = [0, 1, 2, ...generator()];
Copier après la connexion

mais le passage par référence n'est pas autorisé. Prenons l'exemple suivant :

$arr1 = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;];
  $arr2 = [...&$arr1];
Copier après la connexion

Si nous essayons de passer par référence, PHP générera l'erreur d'analyse suivante :

Parse error: syntax error, unexpected &#39;&&#39; in /app/spread-operator.php on line 3
Copier après la connexion

Si les éléments du premier tableau sont stockés par référence, alors ils le sont également stocké par référence dans le deuxième tableau. Voici un exemple :

   $arr0 = &#39;red&#39;;
  $arr1 = [&$arr0, &#39;green&#39;, &#39;blue&#39;];
  $arr2 = [&#39;white&#39;, ...$arr1, &#39;black&#39;];
Copier après la connexion

Voici ce que nous obtenons avec PHP 7.4 :

array(5) {
    [0]=>
    string(5) "white"
    [1]=>
    &string(3) "red"
    [2]=>
    string(5) "green"
    [3]=>
    string(4) "blue"
    [4]=>
    string(5) "black"
  }
Copier après la connexion

Fonctions fléchées 2.0 (fermetures courtes)

En PHP, les fonctions anonymes sont considérées comme très verbeuses et difficiles à implémenter et à maintenir, RFC recommande d'introduire une syntaxe de fonction de flèche (ou de fermeture courte) plus simple et plus claire afin que nous puissions écrire du code de manière concise.

Avant PHP 7.4 :

function cube($n){
    return ($n * $n * $n);
  }
  $a = [1, 2, 3, 4, 5];
  $b = array_map(&#39;cube&#39;, $a);
  print_r($b);
Copier après la connexion

PHP 7.4 permet une syntaxe plus concise, la fonction ci-dessus peut être réécrite comme suit :

$a = [1, 2, 3, 4, 5];
  $b = array_map(fn($n) => $n * $n * $n, $a);
  print_r($b);
Copier après la connexion

Actuellement, en raison de la structure du langage, Les fonctions anonymes (fermetures) peuvent hériter des variables définies dans la portée parent en utilisant use, comme indiqué ci-dessous :

$factor = 10;
  $calc = function($num) use($factor){
    return $num * $factor;
  };
Copier après la connexion

Mais en PHP 7.4, la valeur de la portée parent est capturée implicitement (implicitement liée par la portée de la valeur). On peut donc compléter cette fonction en une seule ligne :

$factor = 10;
  $calc = fn($num) => $num * $factor;
Copier après la connexion

Les variables définies dans le scope parent peuvent être utilisées pour les fonctions fléchées. C'est équivalent à notre utilisation de use et ne peut pas être modifié par le parent.

La nouvelle syntaxe constitue une grande amélioration du langage car elle nous permet de créer un code plus lisible et maintenable.

Opérateur de coalescence NULL

En raison du grand nombre de situations où les expressions ternaires et isset () sont utilisées simultanément dans l'utilisation quotidienne, nous avons ajouté l'opérateur de coalescence nul (? ?) Ce sucre syntaxique. Si la variable existe et n'est pas NULL, elle renvoie sa propre valeur, sinon elle renvoie son deuxième opérande.

$username = $_GET[&#39;user&#39;] ?? ‘nobody&#39;;
Copier après la connexion

Ce que fait ce code est très simple : il récupère le paramètre de requête et définit une valeur par défaut s'il n'existe pas. Mais dans cet exemple RFC, que se passe-t-il si nous avons des noms de variables plus longs ?

$this->request->data[&#39;comments&#39;][&#39;user_id&#39;] = $this->request->data[&#39;comments&#39;][&#39;user_id&#39;] ?? &#39;value&#39;;
Copier après la connexion

长远来看,这段代码可能难以维护。因此,旨在帮助开发人员编写更直观的代码,这个 RFC 建议引入 null 合并等于运算符 (null_coalesce_equal_operator)??=,所以我们可以敲下面这段代码来替代上面的这段代码:

$this->request->data[&#39;comments&#39;][&#39;user_id&#39;] ??= ‘value’;
Copier après la connexion

如果左侧参数的值为 null,则使用右侧参数的值。

注意,虽然 coalesce 运算符 ?? 是一个比较运算符,但 ??= 它是赋值运算符。

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!