Comment mettre à jour le code qui utilise la fonction obsolète each()
P粉883223328
P粉883223328 2023-08-22 11:44:11
0
2
552

Avec PHP 7.2, la fonction each est obsolète. La documentation mentionne :

Avertissement Depuis PHP 7.2.0, cette fonction est obsolète. Le recours à cette fonction est fortement déconseillé.

Comment mettre à jour mon code pour éviter de l'utiliser ? Voici quelques exemples :

  1. $ar = $o->me; réinitialiser($ar); list($typ, $val) = each($ar);
    ≪/li>
  2. $out = array('me' => array(), 'mytype' => 2, '_php_class' => null); $attendu = chacun($out);
    ≪/li>
  3. for(reset($broken);$kv = each($broken);) {...}
    ≪/li>
  4. list(, $this->result) = each($this->cache_data);
    ≪/li>
  5. // itérer jusqu'à la fin d'un tableau ou une limite > $je = 0 ; réinitialiser ($ tableau); while( (list($id, $item) = each($array)) || $i < 30 ) { //code $i++; } ≪/li> 

Lorsque j'exécute le code sur PHP 7.2, j'obtiens l'erreur suivante :

Obsolète : la fonction each() est obsolète. Ce message sera ignoré lors des prochains appels


P粉883223328
P粉883223328

répondre à tous (2)
P粉463418483

2019+mise à niveau instantanéeeach()

Il existe en fait de nombreux cas oùeach()peut être remplacé, c'est pourquoi il y a tant de réponses différentes votées positivement à cette question.

-while (list($key, $callback) = each($callbacks)) { +foreach ($callbacks as $key => $callback) { // ... }

Aussi :

-while (list($key) = each($callbacks)) { +foreach (array_keys($callbacks) as $key) { // ... }

Vous pouvez remplacer manuellement un par un. Mais n'y a-t-il pas une meilleure solution ?

J'aide dans des projets de migration et j'ai plus de 150 cas comme celui-ci. Je suis paresseux, alors j'ai crééun outil appeléRectorqui convertit le code de la manière ci-dessus(il y a plus de cas, mais je ne veux pas spammer la réponse).

Il fait partie de la collectionPHP_72.


4 étapes pour mettre à jour votre code

1.Installation

composer require rector/rector --dev

2. Créez unrector.phpfichier de configuration

vendor/bin/rector init

3. Ajouter unePHP_72Collection

set(Option::SETS, [ Setlist::PHP_72, ]); };

4. Exécutez-le sur votre code

vendor/bin/rector process src --set php72

J'espère que cela vous aidera dans votre migration.


S'il y a des erreurs ou des exceptions, c'est ce que le Recteur a manqué.Créez un problèmeafin que nous puissions le résoudre et le faire fonctionner dans tous les cas possibles.

    P粉982881583
    1. Pour vos deux premiers exemples de cas, vous pouvez utiliserkey()current()pour attribuer les valeurs dont vous avez besoin.

      $ar = $o->me; // 重置不是必需的,因为你刚刚创建了数组 $typ = key($ar); $val = current($ar);
    2. $out = array('me' => array(), 'mytype' => 2, '_php_class' => null); $expected = [key($out), current($out)];

      Dans ces cas, vous pouvez utilisernext()pour avancer le curseur par la suite, mais cela peut ne pas être nécessaire si le reste de votre code n'en dépend pas.

    3. Pour le troisième cas, je vous suggère d'utiliser simplement unforeach()循环,并在循环内部分配$kv.

      foreach ($broken as $k => $v) { $kv = [$k, $v]; }
    4. Pour le quatrième cas, la clé semble être ignorée danslist()afin que vous puissiez attribuer la valeur actuelle.

      $this->result = current($this->cache_data);

      Comme dans les deux premiers cas, selon la façon dont le reste de votre code interagit avec$this->cache_data, vous devrez peut-être utiliser$this->cache_data交互,可能需要使用next()pour faire avancer le curseur.

    5. Le cinquième cas peut être remplacé parfor()boucle.

      reset($array); for ($i = 0; $i < 30; $i++) { $id = key($array); $item = current($array); // 代码 next($array); }
      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!