这不是真正的流畅的界面。我有一个构建方法堆栈的对象。哪个由单个函数调用执行。但现在我可能会添加另一个虚拟方法,它“接管”该方法堆栈。
使用案例:我将超级全球包裹在物体中。这允许我“强制”输入过滤。 $ _GET和co提供简单的消毒方法。而我的新版本现在允许链接原子过滤器。例如:
$_GET->ascii->nocontrol->text["field"]
这是方法调用。它使用尖括号。但这只是一个很好的技巧,可以轻松重写$_GET["field"]
的任何内容。反正。
现在偶尔还有枚举字段的表单,如字段[0],字段[1],字段[2]。这就是我添加虚拟 - >数组滤镜方法的原因。它劫持了收集的方法堆栈,并在其上迭代剩余的过滤器。 $ _POST数组值。例如$_POST->array->int["list"]
。
稍微缩短了实施时间:
function exec_chain ($data) {
...
while ($filtername = array_pop($this->__filter)) {
...
$data = $this->{"_$filtername"} ($data);
...
}
function _array($data) {
list($multiplex, $this->__filter) = array($this->__filter, array());
$data = (array) $data;
foreach (array_keys($data) as $i) {
$this->__filter = $multiplex;
$data[$i] = $this->exec_chain($data[$i]);
}
return $data;
}
方法堆栈在$this->__filter
列表中汇编。上面的exec_chain()只是循环遍历它,每次删除第一个方法名称。虚拟_array处理程序通常是第一种方法。它只是窃取了方法堆栈,并重新执行每个数组元素的余数。与上面的示例代码不完全相同,但它只是重复填充原始方法堆栈。
有效。但感觉有点不干净。我正在考虑添加另一个虚拟方法->xor
。 (YAGNI?)哪个不会迭代字段,而是评估备用过滤器是否成功。例如$_REQUEST->array->xor->email->url["fields"]
。我想知道是否有更好的劫持功能列表模式。我当前的钩子列表($ this-> __ filter)交换不适合链接。嗯,实际上, - > xor示例不需要迭代/行为完全像 - >数组。
具体来说,我有兴趣找到一个替代我的$ this-> __过滤器列表用于array_pop()并偷偷摸摸地将其交换掉。这是不好的。有没有更好的实现方案来执行方法列表半部分我 - >你的一半是什么?
答案 0 :(得分:2)
之前我做过类似的链接界面,我喜欢你在GET / POST变种上使用它的想法。
我认为你最好做一些像
$var->array->email_XOR_url;而不是
$var->array->email->XOR->url;这样的事情。这样你就可以用__get / __调用魔法来捕捉各种组合。