Comment mettre à jour le code qui utilise la fonction obsolète each()
P粉883223328
2023-08-22 11:44:11
<p>Avec PHP 7.2, la fonction <code>each</code> est obsolète. La documentation mentionne : </p>
<blockquote>
<p><strong>Avertissement</strong> Depuis PHP 7.2.0, cette fonction est obsolète. Le recours à cette fonction est fortement déconseillé. </p>
</blockquote>
<p>Comment mettre à jour mon code pour éviter de l'utiliser ? Voici quelques exemples : </p>
<ol>
<li>
<pre class="brush:php;toolbar:false;">$ar = $o->me;
réinitialiser($ar);
list($typ, $val) = each($ar);</pre>
≪/li>
<li>
<pre class="brush:php;toolbar:false;">$out = array('me' => array(), 'mytype' => 2, '_php_class' => null);
$attendu = chacun($out);</pre>
≪/li>
<li>
<pre class="brush:php;toolbar:false;">for(reset($broken);$kv = each($broken);) {...}</pre>
≪/li>
<li>
<pre class="brush:php;toolbar:false;">list(, $this->result) = each($this->cache_data);</pre>
≪/li>
<li>
<pre class="brush:php;toolbar:false;">// 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++;
}</pré>
≪/li>
</ol>
<p>Lorsque j'exécute le code sur PHP 7.2, j'obtiens l'erreur suivante : </p>
<blockquote>
<p>Obsolète : la fonction each() est obsolète. Ce message sera ignoré lors des prochains appels</p>
</blockquote><p><br /></p>
2019+mise à niveau instantanée
each()
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.Aussi :
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é Rector qui 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 collection
PHP_72
.4 étapes pour mettre à jour votre code
1.Installation
2. Créez un
rector.php
fichier de configuration3. Ajouter une
PHP_72
Collection4. Exécutez-le sur votre code
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ème afin que nous puissions le résoudre et le faire fonctionner dans tous les cas possibles.
Pour vos deux premiers exemples de cas, vous pouvez utiliser
key()
和current()
pour attribuer les valeurs dont vous avez besoin.Dans ces cas, vous pouvez utiliser
next()
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.Pour le troisième cas, je vous suggère d'utiliser simplement un
foreach()
循环,并在循环内部分配$kv
.Pour le quatrième cas, la clé semble être ignorée dans
list()
afin que vous puissiez attribuer la valeur actuelle.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.Le cinquième cas peut être remplacé par
for()
boucle.