更新使用了已弃用的 each() 函数的代码的方法
P粉883223328
P粉883223328 2023-08-22 11:44:11
0
2
572

使用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 or 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学习者快速成长!