gpt4 book ai didi

php - 类型提示 - 指定一个对象数组

转载 作者:IT王子 更新时间:2023-10-29 00:00:23 26 4
gpt4 key购买 nike

如何将参数类型指定为数组?假设我有一个名为“Foo”的类:

class Foo {}

然后我有一个接受该类类型作为参数的函数:

function getFoo(Foo $f) {}

当我传入一个 'Foo's 数组时,我得到一个错误,说:

Catchable fatal error: Argument 1 passed to getFoo() must be an instance of Foo, array given

有没有办法解决这个问题?也许像

function getFoo(Foo $f[]) {}

最佳答案

如果您想确保您正在使用“Array of Foo”并且您希望确保方法接收“Array of Foo”,您可以:

class ArrayOfFoo extends \ArrayObject {
public function offsetSet($key, $val) {
if ($val instanceof Foo) {
return parent::offsetSet($key, $val);
}
throw new \InvalidArgumentException('Value must be a Foo');
}
}

然后:

function workWithFoo(ArrayOfFoo $foos) {
foreach ($foos as $foo) {
// etc.
}
}

$foos = new ArrayOfFoos();
$foos[] = new Foo();
workWithFoo($foos);

秘诀在于,您要定义“foo 数组”的新“类型”,然后使用类型提示保护传递该“类型”。


Haldayne library如果您不想自己动手,则处理成员(member)要求检查的样板:

class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
protected function allowed($value) { return $value instanceof Foo; }
}

(完全公开,我是 Haldayne 的作者。)


历史记录:Array Of RFC早在 2014 年就提出了此功能。RFC 以 4 yy 和 16 nay 被拒绝。最近的概念reappeared on the internals list ,但投诉与针对原始 RFC 的投诉大致相同:添加此检查将 significantly affect performance .

关于php - 类型提示 - 指定一个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20763744/

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