无法使用call_user_func_array函数使用Laravel Eloquent findOrFail方法

时间:2014-12-30 12:31:55

标签: php laravel eloquent

我已经搜索了如何使用Eloquent方法使用 call_user_func_arra y。但没有找到任何关于它的线索。 我想在我的Eloquent查询中使用call_user_func_array方法使我的代码更加灵活。

代码无效:

$object = call_user_func_array($this->object_type . '::findOrFail', [$this->object_slug]);

错误: -

ErrorException(E_UNKNOWN) call_user_func_array()期望参数1是有效的回调,未找到“友谊”类。

但是如果我没有使用call_user_func_array方法,那么下面的代码运行正常: -

$object = Friendship::find($this->object_slug);

请指导我是否在call_user_func_array函数中使用静态回调方法?如果没有,那么请建议任何替代方法。


解决问题: -

call_user_func_array 方法不关心use namespaces。因此,在命名空间的情况下,添加类的完整路径。

更新了代码: -

call_user_func_array('\SiteApp\Friendship\\' . $this->object_type . '::findOrFail', [$this->object_slug]);

感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

显然call_user_func_array()并不关心导入类的use语句,因此您必须使用完全限定的类名:

call_user_func_array('\SiteApp\Friendship\Friendship::findOrFail', [$this->object_slug]);

这取决于您的情况,但最简单的可能是将全名存储在$this->object_type中。

// $this->object_type = '\SiteApp\Friendship\Friendship';
call_user_func_array($this->object_type . '::findOrFail', [$this->object_slug]);