检查类是否在PHP中有方法

her*_*ron 17 php oop methods class

目前我的代码看起来像这样:

switch ($_POST['operation']) {
    case 'create':
        $db_manager->create();
        break;
    case 'retrieve':
        $db_manager->retrieve();
        break;
...
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是,检查调用方法是否$_POST['operation']存在:如果是,则调用它,否则回显"错误"是否可能?我怎样才能做到这一点?

Bra*_*tie 37

您可以使用method_exists:

if (method_exists($db_manager, $_POST['operation'])){
  $db_manager->{$_POST['operation']}();
} else {
  echo 'error';
}
Run Code Online (Sandbox Code Playgroud)

虽然我强烈建议你不要这样编程......

  • @epic_syntax:因为我可以使用wget/cURL欺骗POST变量并撬开你不一定要暴露的方法.此外,您永远不会直接信任用户输入,您总是想要清理它.基本上,如果你在其他任何地方使用`$ _POST [...]`,但你的文件的顶部嵌入了安全检查中,你做错了并且要求麻烦. (5认同)
  • @iblue:你只是想分享这个链接,可以找到更好的地方,不是吗? (5认同)
  • @BradChristie method_exists 有更安全的替代方案吗?您能解释一下为什么不建议使用它吗? (2认同)

zer*_*kms 11

您可以使用is_callable()method_exists().

它们之间的区别在于,如果__call()处理方法调用,后者将不适用于该情况.