在会话变量中存储函数

时间:2013-05-28 09:05:49

标签: php

是否可以在会话var中存储匿名函数并在以后使用它?

例如:

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

当我调用$_SESSION['myfunc']('Hello')时,它在创建它的页面上工作正常。但是当在另一个页面中调用时,我收到错误

  

调用未定义的函数()

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

3 个答案:

答案 0 :(得分:3)

您无法在会话变量中存储实际函数 - 您在会话中存储的变量需要是可序列化的,而lambdas则不是。此外,这似乎是一件非常令人费解的事情。

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

但是,几乎可以肯定有更好的方法来达到你想要的效果。

答案 1 :(得分:3)

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

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

不确定这是个好主意。

答案 2 :(得分:0)

您希望将函数存储在会话变量中的原因意味着您做错了什么。这个策略的目的是什么?