PHP:E_RECOVERABLE_ERROR:不允许实例化“关闭”?

时间:2014-03-16 03:14:38

标签: php closures

您好,我不能在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"

在另一个上下文中,我得到的东西看起来非常相似(从数组闭包)并动态实例化。有人知道为什么会失败吗?

1 个答案:

答案 0 :(得分:0)

4点项目通常是最有成效的。对于这个特定的错误消息,这实际上是一个非常简洁的参考问题。

您的$create_connection_object()关闭被PHP误解了。

 = new $create_connection_object(..)

对于解释器确实看起来像= new Closure(),因为$create_con_已经是一个匿名函数。 (只有当你的变量包含一个文字类名字符串时才会起作用。)

new是多余的,因为回调本身已经返回new ApConnection。所以只需用$con = new $create_con_()调用它就足以返回事先关闭实例化的对象。