0

是否可以将匿名函数存储在会话变量中并稍后使用?

例如:

$func = "echo $str;";
$_SESSION['myfunc'] = create_function('$str',$func);

当我调用$_SESSION['myfunc']('Hello')它时,它在创建它的页面上运行良好。但是,当在另一个页面中调用它时,我得到了错误

调用未定义的函数()

其他会话变量可用,所以这不是问题。在会话数据中,我看到了对 lambda 的引用,但我无法让它工作。

4

3 回答 3

3

您不能将实际函数存储在会话变量中 - 您在会话中存储的变量需要可序列化,而 lambda 则不是。另外,这似乎是一件非常复杂的事情。

为什么不存储要调用的函数的名称,然后以这种方式执行呢?或者,如果您真的想实现这一点,您可以将函数字符串存储在会话中,然后在会话重新启动后创建函数。

但是,几乎可以肯定有更好的方法来实现您想要的。

于 2013-05-28T09:09:07.373 回答
3

有一个允许序列化闭包的库:https ://github.com/jeremeamia/super_closure

这可能允许您在会话中存储闭包。

不过,不确定这是个好主意。

于 2013-05-28T09:12:41.807 回答
0

您想将函数存储在会话变量中的原因意味着您做错了什么。从你的角度来看,这个策略的意图是什么?

于 2013-05-28T09:38:00.250 回答