Cara mengemas kini kod yang menggunakan fungsi each() yang telah ditamatkan
P粉883223328
2023-08-22 11:44:11
<p>Dengan PHP 7.2, fungsi <kod>setiap</code> Dokumentasi menyebut: </p>
<blockquote>
<p><strong>Amaran</strong> Mulai PHP 7.2.0, fungsi ini telah ditamatkan. Pergantungan pada fungsi ini amat tidak digalakkan. </p>
</blockquote>
<p>Bagaimanakah saya mengemas kini kod saya untuk mengelak daripada menggunakannya? Berikut ialah beberapa contoh: </p>
<ol>
<li>
<pre class="brush:php;toolbar:false;">$ar = $o->me;
set semula($ar);
list($typ, $val) = each($ar);</pre>
</li>
<li>
<pre class="brush:php;toolbar:false;">$out = array('me' => array(), 'mytype' => 2, '_php_class' => null);
$expected = each($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;">// berulang ke penghujung tatasusunan atau had >
$i = 0;
reset($array);
while((list($id, $item) = each($array)) || $i < 30 ) {
// kod
$i++;
}</pre>
</li>
</ol>
<p>Apabila saya melaksanakan kod pada PHP 7.2, saya mendapat ralat berikut: </p>
<blockquote>
<p>Ditamatkan: Fungsi each() telah ditamatkan. Mesej ini akan diabaikan semasa panggilan lanjut</p>
</blockquote><p><br /></p>
2019+naik taraf segera
each()
Sebenarnya terdapat banyak kes di mana
each()
boleh digantikan, itulah sebabnya terdapat begitu banyak jawapan undian tinggi yang berbeza dalam soalan ini.Juga:
Anda boleh menggantikan secara manual satu per satu. Tetapi tidakkah ada cara yang lebih baik?
Saya membantu dengan projek migrasi dan mempunyai lebih daripada 150 kes seperti ini. Saya malas, jadi saya membuat alat yang dipanggil Rektor yang menukar kod ke cara di atas (ada lagi kes, tetapi saya tidak mahu spam jawapannya).
Ia adalah sebahagian daripada koleksi
PHP_72
.4 langkah untuk meningkatkan kod anda
1. Pemasangan
2. Cipta
rector.php
fail konfigurasi3. Tambah
PHP_72
Koleksi4. Jalankan pada kod anda
Semoga ia membantu dengan penghijrahan anda.
Jika terdapat sebarang kesilapan atau pengecualian, itu yang Rektor terlepas. Buat isu supaya kami boleh membetulkannya dan menjadikannya berfungsi untuk semua kes yang mungkin.
Untuk dua contoh kes pertama anda, anda boleh menggunakan
key()
和current()
untuk menetapkan nilai yang anda perlukan.Dalam kes ini, anda boleh menggunakan
next()
untuk memajukan kursor selepas itu, tetapi ini mungkin tidak diperlukan jika selebihnya kod anda tidak bergantung padanya.Untuk kes ketiga, saya cadangkan anda hanya menggunakan
foreach()
循环,并在循环内部分配$kv
.Untuk kes keempat, kunci nampaknya diabaikan dalam
list()
supaya anda boleh menetapkan nilai semasa.Seperti dua kes pertama, bergantung pada cara selebihnya kod anda berinteraksi dengan
$this->cache_data
, anda mungkin perlu menggunakan$this->cache_data
交互,可能需要使用next()
untuk memajukan kursor.Kes kelima boleh digantikan dengan
for()
gelung.