非推奨の each() 関数を使用するコードを更新する方法
P粉883223328
2023-08-22 11:44:11
<p>PHP 7.2 では、<code>each</code> 関数は非推奨になりました。ドキュメントには次のように記載されています: </p>
<ブロック引用>
<p><strong>警告</strong> PHP 7.2.0 以降、この関数は非推奨になりました。この関数に依存することは強くお勧めしません。 </p>
</blockquote>
<p>コードを使用しないようにコードを更新するにはどうすればよいですか?以下にいくつかの例を示します: </p>
<ol>
;
<pre class="brush:php;toolbar:false;">$ar = $o->me;
リセット($ar);
list($typ, $val) = each($ar);</pre>
</li>
;
<pre class="brush:php;toolbar:false;">$out = array('me' => array(), 'mytype' => 2, '_php_class' => null);
$expected = each($out);</pre>
</li>
;
<pre class="brush:php;toolbar:false;">for(reset($broken);$kv = each($broken);) {...}</pre>
</li>
;
<pre class="brush:php;toolbar:false;">list(, $this->result) = each($this->cache_data);</pre>
</li>
;
<pre class="brush:php;toolbar:false;">// 配列の末尾または制限まで反復 > 配列の長さ
$i = 0;
リセット($array);
while( (list($id, $item) = each($array)) || $i < 30 ) {
// コード
$i;
}</pre>
</li>
</ol>
<p>PHP 7.2 でコードを実行すると、次のエラーが表示されます。</p>
<ブロック引用>
<p>非推奨: each() 関数は非推奨になりました。このメッセージはその後の呼び出しでは無視されます</p>
</blockquote><p><br /></p>
2019 インスタント アップグレード
each()
実際には
リーリー ###その上:### リーリーeach()
を置き換えることができる状況は数多くあります。そのため、この質問には非常に多くの異なる賛成票が寄せられています。これらは手動で 1 つずつ置き換えることができます。しかし、もっと良い方法はないでしょうか?
私は移行プロジェクトを支援しており、このようなケースを 150 件以上経験しています。私は怠け者なので、コードを上記の方法に変換できる
Rectorというツールを作りました (もっと多くのケースがありますが、答えをスパム送信したくありません) 。 これは PHP_72
コレクションの一部です。1. インストール
リーリー
2.rector.php
設定ファイルを作成します。 リーリー
コレクション3.
PHP_72を追加します。 リーリー
これが移行に役立つことを願っています。4. コード上で実行します
リーリーエラーや例外がある場合、それは Rector が見逃したものです。
問題を作成すると、問題を修正して、考えられるすべてのケースで動作するようになります。
最初の 2 つの例では、
リーリーkey()
とcurrent()
を使用して必要な値を割り当てることができます。このような場合、
next()
を使用して後でカーソルを進めることができますが、コードの残りの部分がこれに依存しない場合は、これは必要ない可能性があります。3 番目のケースでは、
リーリーforeach()
ループを使用し、ループ内で$kv
を割り当てることをお勧めします。4 番目のケースでは、
リーリーlist()
ではキーが無視されるようですので、現在の値を割り当てることができます。最初の 2 つのケースと同様、コードの残りの部分が
$this->cache_data
とどのようにやり取りするかによっては、next()
を使用してカーソルを進める必要がある場合があります。5 番目のケースは、
リーリーfor()
ループで置き換えることができます。