ArrayObject不适用于PHP 7.4中的end()

潮流渔夫

在迁移到PHP 7.4时,我必须处理某些数组函数(例如reset()current()end()涉及ArrayObject)的不同行为以下示例产生不同的输出:

<?php

$array = new \ArrayObject(["a", "b"]);
$item = end($array);
var_dump($item);


$array = ["a", "b"];
$item = end($array);
var_dump($item);

使用php 7.4的输出是:

bool(false)
string(1) "b"

在7.4之前的PHP版本上,输出如下:

string(1) "b"
string(1) "b"

Aend($array->getArrayCopy())会发出通知,但如果与变量一起使用,可能会变通。

有没有办法模仿的行为end()与一个ArrayObjectArrayIteratorArrayObject可能非常大,到最后的迭代可能不是最佳解决方案。

索瓦

PHP 7.4开始,数组方法不对内部数组起作用,而是对ArrayObject自身起作用为此,我总结了两种解决方案。

1.获取对象的内部数组。

$array = new \ArrayObject(["a", "b"]);
$item = end($array->getArrayCopy());

2.创建FacadeArrayObject并将自定义方法end()添加到升级的类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章