gpt4 book ai didi

php - 使用对象作为数组

转载 作者:可可西里 更新时间:2023-10-31 23:12:13 24 4
gpt4 key购买 nike

在最近的 PHP 更新中,他们添加了各种接口(interface)以允许将对象视为数组,例如 ArrayAccess、Iterator、Countable 等。

我的问题是,下面的操作是否有意义:

function useArray(array $array)
{
print_r($array);
}

useArray(new ArrayObj(array(1,2,3,4,5));

截至目前,PHP 会抛出类型提示错误,因为 $array 在技术上不是数组。但是,它实现了所有使其与数组基本相同的接口(interface)。

echo $array[0]; // 1
$array[0] = 2;
echo $array[0]; // 2

从逻辑上讲,该对象应该能够在任何可以使用数组的地方使用,因为它实现了与数组相同的接口(interface)。

我是否对我的逻辑感到困惑,或者如果一个对象实现与数组相同的接口(interface),它应该能够在所有相同的地方使用是否有意义?

最佳答案

Am I confused in my logic, or does it makes sense that if an object implements the same interface as an array, it should be able to be used in all the same places?

array 是一种特殊的 PHP 变量类型 - 不是 对象 - 因此它不实现任何接口(interface)。 ArrayObject 是一个成熟的对象,它实现了许多接口(interface)(CountableArrayAccess 等)并使对象像某些情况(比如在 foreach 循环中)。因此,虽然它们不实现相同的接口(interface),但它们有时的行为相同。

理想的解决方案是让 PHP 支持多个函数签名:

function useArray(array $array) { }
function useArray(ArrayObject $array) { }

但在我们得到它之前(如果我们曾经得到它)你只需要检查函数定义之外的变量类型:

function useArray($array) {
if (is_array($array) || $array instanceof ArrayObject) {
// Do some stuff
} else {
throw new Exception('I require an array or an array-like structure!');
}
}

或者尝试使用 $array 参数执行 array 类型的操作,并处理 useArray 可能生成的任何警告/错误。

关于php - 使用对象作为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2214397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com