我正在尝试对集合中的每个元素运行一个方法。它是同一类中存在的对象方法:
protected function doSomething()
{
$discoveries = $this->findSomething();
$discoveries->each([$this, 'doSomethingElse']);
}
protected function doSomethingElse($element)
{
$element->bar();
// And some more
}
如果我在对Collection::each
的调用之前添加检查is_callable([$this, 'doSomethingElse'])
,它会返回true,所以显然是可调用的。然而,调用本身会抛出一个异常:
可以在这里找到试图调用的方法 here。Type error: Argument 1 passed to Illuminate\Support\Collection::each() must be callable, array given, called in ---.php on line 46
我通过只传递一个闭包来绕过这个问题,闭包本身只是调用那个函数,但这肯定是一种更干净的解决方案,我找不到为什么会引发错误。
is_callable
返回true,因此我会认为当传递给期望一个“可调用对象”的函数时它可以工作。 - padaromdoSomethingElse()
声明为public
。在我看来,我认为each()
是在上下文中调用collection
类,该类无法访问其他类中受保护的函数。 - dparolifindSomething
或者doSomethingElse
抛出了异常。根据我的有限经验,这个错误信息可能是一个误导。 - Michael Easter