您好,我不能在Google上找到有关此错误的更多信息,我想知道问题是什么。我有一个包含大量信息的数组,包括一些闭包(代码示例缩短):
$create_info = array (
'foo' => 'bar',
'create_connection_object' => function ($my_key,$foreign_key) {
return new ApConnection(intval($my_key), intval($foreign_key));
},
'hello' => 'world'
);
然后根据上下文我有一个使用这个数组的方法:
$create_connection_object = $create_info['create_connection_object'];
$con = new $create_connection_object(intval($request->first_id),intval($request->second_id));
执行此代码时,出现以下错误:
"E_RECOVERABLE_ERROR: Instantiation of 'Closure' is not allowed"
在另一个上下文中,我得到的东西看起来非常相似(从数组闭包)并动态实例化。有人知道为什么会失败吗?
答案 0 :(得分:0)
您的$create_connection_object()
关闭被PHP误解了。
= new $create_connection_object(..)
对于解释器确实看起来像= new Closure()
,因为$create_con_
已经是一个匿名函数。 (只有当你的变量包含一个文字类名字符串时才会起作用。)
new
是多余的,因为回调本身已经返回new ApConnection
。所以只需用$con =
new
$create_con_()
调用它就足以返回事先关闭实例化的对象。