【发布时间】:2017-08-27 12:03:31
【问题描述】:
我正在尝试对集合中的每个元素运行一个方法。它是驻留在同一类中的对象方法:
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,所以显然它是可调用的。然而,调用本身会引发异常:
类型错误:传递给 Illuminate\Support\Collection::each() 的参数 1 必须 可调用,给定数组,在第 46 行的 ---.php 中调用
可以找到尝试调用的方法here。
我只是通过传递一个本身只是调用该函数的闭包来绕过它,但这绝对是一个更清洁的解决方案,我无法找出它抛出错误的原因。
【问题讨论】:
-
@bxN5 它不应该是一个函数,它应该是一个
callable。is_callable返回 true,所以我假设它在传递给期望callable的函数时有效。 -
请尝试将
doSomethingElse()声明为public。恕我直言,我认为each()是在collection类的上下文中调用的,该类对其他类中的受保护函数没有可见性。 -
我怀疑
findSomething或doSomethingElse正在引发异常。以我有限的经验,这个错误消息是一个红鲱鱼。 -
可能是这样,虽然我解决的方法不同,不记得我使用它的确切位置,因此我无法验证。
标签: php laravel collections