Php 如何存储包含回调的数据
当然,存储数据库的方法有很多种。其中最明显的是数据库。但其他包括JSON、XML等 我现在正在处理的项目的问题是,存储的数据包括回调函数作为对象的一部分。据我所知,函数不能序列化。那么,我该怎么办 是否可以将此数据存储为要包含的PHP文件?如果是这样,我应该创建一个包含所有内容的大文件,还是为数据库的每个“行”将其划分为单独的文件Php 如何存储包含回调的数据,php,database,callback,Php,Database,Callback,当然,存储数据库的方法有很多种。其中最明显的是数据库。但其他包括JSON、XML等 我现在正在处理的项目的问题是,存储的数据包括回调函数作为对象的一部分。据我所知,函数不能序列化。那么,我该怎么办 是否可以将此数据存储为要包含的PHP文件?如果是这样,我应该创建一个包含所有内容的大文件,还是为数据库的每个“行”将其划分为单独的文件 有更好的选择吗?根据回调的详细程度,对于序列化,您可以将它们全部封装在一个类中,该类使用一些\uu sleep(创建回调表示)和\uu wakeup(还原回调)巫毒,
有更好的选择吗?根据回调的详细程度,对于序列化,您可以将它们全部封装在一个类中,该类使用一些
\uu sleep
(创建回调表示)和\uu wakeup
(还原回调)巫毒,并使用\uu invoke()
方法调用实际回调。假设您可以对这些回调进行反向工程/重新创建(即指向的对象已清除)。。。。如果不是,你可能就不走运了。根据回调的详细程度,为了序列化,你可以将它们全部封装在一个类中,该类使用一些\uu sleep
(创建回调表示)和\uu wakeup
(还原回调)巫毒,并使用\uu invoke()
方法调用实际回调。假设您可以对这些回调进行反向工程/重新创建(即指向的对象已清除)。。。。如果没有,您可能运气不好。存储回调的名称,创建从名称到函数的查找表,使用table.call(obj,name,…)
或table.apply(obj,name,…)
调用。在可序列化对象本身中没有任何代码。因为它们是开发人员创建的,所以应该有一个有限的清单,它们应该是代码,不应该序列化
或者,制作一个实现回调的原型,并将其分配给
obj.\uuuu proto\uuuu
。在序列化之前,杀死对象。\uuuu proto\uuuu
——所有函数都会消失。以后再恢复。不确定跨浏览器是否兼容;我似乎读过一些关于在某些浏览器中无法访问的\uu proto\uuuu
的内容,khminternetxploreorperakhm存储回调的名称,从名称到函数都有一个查找表,使用table.call(obj,name,…)
或table.apply(obj,name,…)
来调用。在可序列化对象本身中没有任何代码。因为它们是开发人员创建的,所以应该有一个有限的清单,它们应该是代码,不应该序列化
或者,制作一个实现回调的原型,并将其分配给
obj.\uuuu proto\uuuu
。在序列化之前,杀死对象。\uuuu proto\uuuu
——所有函数都会消失。以后再恢复。不确定跨浏览器是否兼容;我似乎读过一些关于在某些浏览器中无法访问的\uuuu proto\uuuu
的文章,khminternetexploreroperakhm如果它们是由开发人员创建的,那么应该很容易找到一种格式。。。例如,使用JSON:
{
"callback" : {
"contextType": "instance", // or "static"
"callable" : "phpFunctionName",
"arguments" : []
}
}
因此,在模型上,您可以使用此功能,例如:
protected function invokeCallback($json, $context = null) {
$data = json_decode($json, true);
if(isset($data['callaback'])) {
if($data['contextType'] == 'instance') {
$context = is_object($context) ? $context : $this;
$callable = array($context, $data['callable']);
} else {
// data[callable] is already the string function name or a array('class', 'staticMethod')
$callable = $data['callable'];
}
if(is_callable($callable) {
return call_user_func_array($callable, $data['arguments'];
} else {
throw new Exception('Illegal callable');
}
}
return false;
}
这里还需要进行更多的错误处理,以及对您希望允许的可调用项进行一些筛选,但您已经有了想法。如果它们是由开发人员创建的,那么应该很容易找到一种格式。。。例如,使用JSON:
{
"callback" : {
"contextType": "instance", // or "static"
"callable" : "phpFunctionName",
"arguments" : []
}
}
因此,在模型上,您可以使用此功能,例如:
protected function invokeCallback($json, $context = null) {
$data = json_decode($json, true);
if(isset($data['callaback'])) {
if($data['contextType'] == 'instance') {
$context = is_object($context) ? $context : $this;
$callable = array($context, $data['callable']);
} else {
// data[callable] is already the string function name or a array('class', 'staticMethod')
$callable = $data['callable'];
}
if(is_callable($callable) {
return call_user_func_array($callable, $data['arguments'];
} else {
throw new Exception('Illegal callable');
}
}
return false;
}
这里还需要进行更多的错误处理,以及对您想要允许的可调用项进行一些筛选,但您知道了。这些是用户定义的回调,还是开发人员将创建的回调?这些是用户定义的回调,还是开发人员将创建的回调?啊,php跨浏览器兼容,
\uuuuu协议
?你确定你说的是正确的语言吗?:)呵呵。是的,这有点轻描淡写,不是吗DAhum,php跨浏览器兼容,\uuuuuuuuuuuuuu
?你确定你说的是正确的语言吗?:)呵呵。是的,这有点轻描淡写,不是吗DSo基本上这调用了一个函数,该函数是在代码的其他地方用指定的参数和上下文定义的?我想这是可行的,但我担心的是所有回调都是匿名的,几乎是唯一的函数。啊。。。我没有意识到它们是匿名函数。在这种情况下,最好考虑将序列化的“事件”存储在datastor中,然后可以将anon函数注册到事件中,就像在Node中一样。主要用例的一个具体示例可能会让您得到一些更好的想法:-)被认为是目前为止最好的答案。所以基本上这调用了一个在代码中其他地方定义的函数,并带有指定的参数和上下文?我想这是可行的,但我担心的是所有回调都是匿名的,几乎是唯一的函数。啊。。。我没有意识到它们是匿名函数。在这种情况下,最好考虑将序列化的“事件”存储在datastor中,然后可以将anon函数注册到事件中,就像在Node中一样。主要用例的一个具体示例可能会让您得到一些更好的想法:-)被认为是迄今为止最好的答案。