array_values不适用于ArrayAccess对象

the*_*cat 5 php arrayaccess

array_values()不适用于ArrayAccess对象。也不array_keys()

为什么?

如果我可以访问,$object['key']我应该能够执行所有类型的数组操作

lon*_*day 5

不,您误解了 ArrayAccess 的实用性。它不仅仅是一种数组的包装器。是的,实现它的标准示例使用一个私有$array变量,其功能由类包装,但这并不是一个特别有用的变量。通常,您也可以只使用数组。

ArrayAccess 的一个很好的例子是脚本不知道哪些变量可用。

作为一个相当愚蠢的例子,想象一个与远程服务器一起工作的对象。可以使用 API 跨网络读取、更新和删除该服务器上的资源。程序员决定要使用类似数组的语法包装该功能,因此在该服务器上$foo['bar'] = 'foobar'设置bar资源foobarecho $foo['bar']检索它。如果不尝试所有可能的值,脚本就无法找出存在哪些键或值。

因此,ArrayAccess 允许使用数组语法来设置、更新、检索或删除具有类似数组语法的对象:不多也不少。

另一个接口Countable允许使用count(). 您可以在同一个类上使用这两个接口。理想情况下,会有更多这样的接口,也许包括那些可以执行array_values或 的接口array_keys,但目前它们不存在。