Изготовление раковины - PullRequest
       5

Изготовление раковины

0 голосов
/ 10 декабря 2010

Я работаю над проектом, в котором панель администратора - это просто оболочка, которая выполняет некоторые действия в зависимости от того, какую строку вы вводите.Под оболочкой я подразумеваю поле ввода, где вы набираете, например,

delete user 1

и пользователь с идентификатором 1 удаляется.Я планировал это примерно на 4 месяца, и я написал все команды, которыми могло управлять приложение.У меня есть некоторые проблемы, чтобы сделать эту систему.Я думал об этом решении:

$c = explode(' ', $input);
if ($c[0] == 'delete' and $c[1] == 'user' and count($c) === 3)
{
    $c[2] = $id;
    delete_user_by_id($id);
}

Но я думаю, что оно не очень хорошо спроектировано, и я уверен, что его можно улучшить.Я заметил, что существует регулярное выражение и что они могут быть лучше этого, но я не могу понять, как их использовать в предыдущем примере.Любая идея?

{Обратите внимание, что часть строки является переменной (удалить пользователя VARIABLE )}

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

Вместо набора операторов if вы должны создать класс для каждой команды, который принимает информацию в качестве аргумента и что-то делает.Вам просто нужно загрузить класс, когда он вызывается.

$command = 'delete user 1';
$parsed = explode($command, ' ', 2);

load_class($parsed[0]); // hypothetical loader

if (class_exists($parsed[0])) {
    $class = new $parsed[0]();
    $class->execute($parsed[1]);
} else {
    die('Sorry, invalid command');
}
1 голос
/ 10 декабря 2010

Я думаю, что взрыв в пространствах чище, чем использование регулярных выражений.

Возможно, вы сможете немного очистить код с помощью оператора switch и обрезать ввод перед тем, как его разобрать:

$c explode(' ', trim($input));
switch(strtolower($c)) {
  case 'delete' :
    delete_user_by_id($c[2]);
    break;

  case 'update' :
    update_user_by_id($c[2]);
    break;

  ...

  default :
    echo 'Invalid command: '.$c;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...