我已经搜索了如何使用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]);
感谢您的帮助:)
答案 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]);