使用PHP 7.2,each
函數已被棄用。文檔中提到:
警告 從PHP 7.2.0開始,該函數已被棄用。強烈不建議依賴該函數。
如何更新我的程式碼以避免使用它?以下是一些範例:
$ar = $o->me; reset($ar); list($typ, $val) = each($ar);
$out = array('me' => array(), 'mytype' => 2, '_php_class' => null); $expected = each($out);
for(reset($broken);$kv = each($broken);) {...}
list(, $this->result) = each($this->cache_data);
// iterating to the end of an array 或 a limit > the length of the array $i = 0; reset($array); while( (list($id, $item) = each($array)) || $i < 30 ) { // code $i ; }
當我在PHP 7.2上執行程式碼時,會收到以下錯誤:
已棄用:each()函數已被棄用。此訊息將在進一步呼叫時被忽略
2019 即時升級
each()
#實際上有很多情況下可以替換
each()
,這就是為什麼在這個問題中有這麼多不同的被贊同的答案。還有:
你可以手動一個一個地替換。但是沒有更好的方法嗎?
我幫忙遷移項目,有150多個這樣的情況。我很懶,所以我做了一個叫做Rector的工具,可以將程式碼轉換成上述的方式(還有更多情況,但我不想在答案中垃圾郵件) 。
它是
PHP_72
集合的一部份。升級程式碼的4個步驟
1. 安裝
2. 建立
rector.php
設定檔3. 新增
PHP_72
集合4. 在你的程式碼上運行它
希望它對你的遷移有幫助。
如果有任何錯誤或異常,那是Rector錯過的情況。建立一個問題,這樣我們就可以修復它,並使其適用於所有可能的情況。
對於你的前兩個範例案例,你可以使用
key()
和current()
來指派你所需要的值。在這些情況下,你可以使用
next()
在之後推進遊標,但如果你的其餘程式碼不依賴它,這可能是不必要的。對於第三種情況,我建議你只是使用一個
foreach()
循環,並在循環內部分配$kv
。對於第四種情況,在
list()
中似乎忽略了鍵,所以你可以指派目前值。就像前兩種情況一樣,根據你的其餘程式碼如何與
$this->cache_data
交互,可能需要使用next()
推進遊標。第五種情況可以用
for()
迴圈來取代。