2013-05-28 183 views
0

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

例如:

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

当我打电话$_SESSION['myfunc']('Hello')它的工作原理是在创建页面上的罚款时,在另一个页面调用但是,我得到的错误

调用未定义功能。 ()

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

+0

你能指定你这样做的实际要求吗? – Dino

+3

你为什么要那样做? –

+0

为什么要在会话中存储函数?一旦你刷新页面,当你执行'var_dump($ _ SESSION ['myfunc']);''时,你会得到什么? –

回答

2

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

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

然而,几乎可以肯定有更好的方法来实现你想要的。

2

有允许序列关闭库:https://github.com/jeremeamia/super_closure

这可能允许你存储一个封闭的会议。

不确定这是个好主意。

+0

奇怪的巧合 - 我只是在周末看super_closure类,甚至在Twitter上发布推文 - 但我还没有真正使用过它,所以无法评论它在现实世界环境中的实用程度 –

-1

你想在会话变量中存储函数的原因意味着你做错了什么。你这边的战略意图是什么?