Home  >  Article  >  Backend Development  >  如何更优雅的写这段代码

如何更优雅的写这段代码

WBOY
WBOYOriginal
2016-06-06 20:39:03968browse

<code><?php $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)) throw new Exception('404');

$control = new App();
$method = 'on' . ucfirst($actions[$command]);

//判断类里面是否存在该函数
if (!method_exists($control, $method)) throw new Exception('404');
</code>

回复内容:

<code><?php $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)) throw new Exception('404');

$control = new App();
$method = 'on' . ucfirst($actions[$command]);

//判断类里面是否存在该函数
if (!method_exists($control, $method)) throw new Exception('404');
</code>

凭感觉猜测题主是需要一个简洁的分发,那么可以考虑

<code>php</code><code>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']);
</code>

先指出一点错误, 一般检测类似controller这种类方法是否可以被调用, 需要使用is_callable而不是method_exists, 前者检查方法是否可以被调用(存在且公开), 后者只是单纯检查方法是否存在。

<code>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();
</code>

看看 Flight 框架 也是另外一种思路

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn