如何更优雅的写这段代码
程序员文章站
2022-05-12 20:56:56
...
'profile',
3 => 'login',
7 => 'show',
9 => 'update',
11 => 'stop',
13 => 'start',
15 => 'remove',
);
//判断命令对应的动作是否存在
if (!array_key_exists($command, $actions)) throw new Exception('404');
$control = new App();
$method = 'on' . ucfirst($actions[$command]);
//判断类里面是否存在该函数
if (!method_exists($control, $method)) throw new Exception('404');
回复内容:
'profile',
3 => 'login',
7 => 'show',
9 => 'update',
11 => 'stop',
13 => 'start',
15 => 'remove',
);
//判断命令对应的动作是否存在
if (!array_key_exists($command, $actions)) throw new Exception('404');
$control = new App();
$method = 'on' . ucfirst($actions[$command]);
//判断类里面是否存在该函数
if (!method_exists($control, $method)) throw new Exception('404');
凭感觉猜测题主是需要一个简洁的分发,那么可以考虑
php
class App { protected static $actions = [ 1 => 'onProfile', 2 => 'onLogin', //... ]; public function run($command) { if (!isset(self::$actions[$command])) { throw ...; } $callback = [$this, self::$actions[$command]]; if (!is_callable($callback)) { throw ...; } call_user_func($callable); } } //index.php new App()->run($_GET['command']);
先指出一点错误, 一般检测类似controller这种类方法是否可以被调用, 需要使用is_callable而不是method_exists, 前者检查方法是否可以被调用(存在且公开), 后者只是单纯检查方法是否存在。
class NotFoundException extends Exception {}
$command = $_GET['command'] ?: false;
$actions = array(
'profile',
'login',
'show',
'update',
'stop',
'start',
'remove',
);
//判断命令对应的动作是否存在
if ( ! in_array($command, $actions))
throw new NotFoundException();
$control = new App();
$method = 'on' . ucfirst($command);
//判断类里面是否存在该函数
if ( ! is_callable(array($control, $method)))
throw new NotFoundException();
看看 Flight 框架 也是另外一种思路
上一篇: 有一个关于数据表设计的问题
下一篇: 求高手帮忙实现 一段代码