PHP 类型提示以允许数组或数组访问

2022-08-30 22:21:07

是否可以允许数组或实现 ArrayAccess 的对象?

例如:

class Config implements ArrayAccess {
    ...
}

class I_Use_A_Config
{
    public function __construct(Array $test)
    ...
}

我希望能够传入数组或数组访问。

除了手动检查参数类型之外,是否有一种干净的方法来执行此操作?


答案 1

不,没有“干净”的方式来做到这一点。

该类型是基元类型。实现接口的对象基于类,也称为复合类型。没有包含两者的类型提示。arrayArrayAccess

由于您将 使用 作为数组,因此可以对其进行强制转换。例如:ArrayAccess

$config = new Config;
$lol = new I_Use_A_Config( (array) $config);

如果这不是一个选项(您希望按原样使用对象),则只需删除类型提示并检查它是数组还是 .我知道你想避免这种情况,但这没什么大不了的。它只是几行,当一切都说完了,做完了,无关紧要。ConfigArrayAccess


答案 2

8.0+ 菲律宾比索

可以使用 和 的并集。arrayArrayAccess

class I_Use_A_Config
{
    public function __construct(array|ArrayAccess $test)
    ...
}

推荐