我正在某个项目上,我想处理来自多个模板中表单的请求.问题是如何在处理脚本中调用适当的功能.虽然,我已经编码了一段时间,但仍然无法提出比在隐藏字段中使用变量更好的方法:
if ($_POST['somehiddenfield'] == 1) {
some_function_1();//doesnt matter if its a function or a method
}
if ($_POST['somehiddenfield'] == 2) {
$mainclass->somemethod();
}
//goes on indefinitely
另外,我想将所有内容保存在单个处理程序文件中,在该文件中将调用我的主类.因此,有没有一种比使用if … else更有效的方法?
解决方法:
我将使用所有可能的选项对key => value数组进行硬编码.传递隐藏的输入字段,检查您的帖子值和硬编码选项的键之间是否有任何交集,并将任何匹配的值作为函数调用.
$map = [
'yourHiddenField' => 'myFunctionName',
'anotherHiddenField' => 'myOtherFunctionName',
'yourOtherHiddenField' => 'yetAnotherfunctionName',
];
$intersection = array_intersect(array_keys($map), array_keys($_POST));
foreach ($intersection as $key) {
$this->{$map[$key])();
}
此代码尚未经过测试.
编辑:
在允许运行任何输入时,请务必谨慎,不要预先定义应允许运行的功能.
即使进行消毒也可能有多危险的示例:
class Test {
public $i = 1;
function __construct(){
$this->i++;
}
}
$formVariable = '__construct';
$t = new test();
$t->{$formVariable}();
echo $t->i;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。