首頁 > 後端開發 > php教程 > 如何更优雅的写这段代码

如何更优雅的写这段代码

WBOY
發布: 2016-06-06 20:39:03
原創
1030 人瀏覽過

<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 框架 也是另外一种思路

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板