在迁移到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()
与一个ArrayObject
或ArrayIterator
?ArrayObject可能非常大,到最后的迭代可能不是最佳解决方案。
从PHP 7.4开始,数组方法不对内部数组起作用,而是对ArrayObject
自身起作用。为此,我总结了两种解决方案。
1.获取对象的内部数组。
$array = new \ArrayObject(["a", "b"]);
$item = end($array->getArrayCopy());
2.创建FacadeArrayObject
并将自定义方法end()添加到升级的类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句