如何更优雅的写这段代码

$command=(int)$_GET['command'];
$actions=array(
1=>'profile',
3=>'login',
7=>'show',
9=>'update',
11=>'stop',
13=>'start',
15=>'remove',
);
//判断命令对应的动作是否存在
if(!array_key_exists($command,$actions))thrownewException('404');
$control=newApp();
$method='on'.ucfirst($actions[$command]);
//判断类里面是否存在该函数
if(!method_exists($control,$method))thrownewException('404');
小唯快跑啊
浏览 360回答 2
2回答

杨__羊羊

凭感觉猜测题主是需要一个简洁的分发,那么可以考虑phpclassApp{protectedstatic$actions=[1=>'onProfile',2=>'onLogin',//...];publicfunctionrun($command){if(!isset(self::$actions[$command])){throw...;}$callback=[$this,self::$actions[$command]];if(!is_callable($callback)){throw...;}call_user_func($callable);}}//index.phpnewApp()->run($_GET['command']);

犯罪嫌疑人X

先指出一点错误,一般检测类似controller这种类方法是否可以被调用,需要使用is_callable而不是method_exists,前者检查方法是否可以被调用(存在且公开),后者只是单纯检查方法是否存在。classNotFoundExceptionextendsException{}$command=$_GET['command']?:false;$actions=array('profile','login','show','update','stop','start','remove',);//判断命令对应的动作是否存在if(!in_array($command,$actions))thrownewNotFoundException();$control=newApp();$method='on'.ucfirst($command);//判断类里面是否存在该函数if(!is_callable(array($control,$method)))thrownewNotFoundException();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript