更新使用了已棄用的 each() 函數的程式碼的方法
P粉883223328
P粉883223328 2023-08-22 11:44:11
0
2
578

使用PHP 7.2,each函數已被棄用。文檔中提到:

警告 從PHP 7.2.0開始,該函數已被棄用。強烈不建議依賴該函數。

如何更新我的程式碼以避免使用它?以下是一些範例:

  1. $ar = $o->me; reset($ar); list($typ, $val) = each($ar);
  2. $out = array('me' => array(), 'mytype' => 2, '_php_class' => null); $expected = each($out);
  3. for(reset($broken);$kv = each($broken);) {...}
  4. list(, $this->result) = each($this->cache_data);
  5. // 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()函數已被棄用。此訊息將在進一步呼叫時被忽略


P粉883223328
P粉883223328

全部回覆 (2)
P粉463418483

2019 即時升級each()

#實際上有很多情況下可以替換each(),這就是為什麼在這個問題中有這麼多不同的被贊同的答案。

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

還有:

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

你可以手動一個一個地替換。但是沒有更好的方法嗎?

我幫忙遷移項目,有150多個這樣的情況。我很懶,所以我做了一個叫做Rector的工具,可以將程式碼轉換成上述的方式(還有更多情況,但我不想在答案中垃圾郵件) 。

它是PHP_72集合的一部份。


升級程式碼的4個步驟

1. 安裝

composer require rector/rector --dev

2. 建立rector.php設定檔

vendor/bin/rector init

3. 新增PHP_72集合

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

4. 在你的程式碼上運行它

vendor/bin/rector process src --set php72

希望它對你的遷移有幫助。


如果有任何錯誤或異常,那是Rector錯過的情況。建立一個問題,這樣我們就可以修復它,並使其適用於所有可能的情況。

    P粉982881583
    1. 對於你的前兩個範例案例,你可以使用key()current()來指派你所需要的值。

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

      在這些情況下,你可以使用next()在之後推進遊標,但如果你的其餘程式碼不依賴它,這可能是不必要的。

    3. 對於第三種情況,我建議你只是使用一個foreach()循環,並在循環內部分配$kv

      foreach ($broken as $k => $v) { $kv = [$k, $v]; }
    4. 對於第四種情況,在list()中似乎忽略了鍵,所以你可以指派目前值。

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

      就像前兩種情況一樣,根據你的其餘程式碼如何與$this->cache_data交互,可能需要使用next()推進遊標。

    5. 第五種情況可以用for()迴圈來取代。

      reset($array); for ($i = 0; $i < 30; $i++) { $id = key($array); $item = current($array); // 代码 next($array); }
      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!