2010-12-10 4 views
0

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

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); 
} 

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

{Обратите внимание, что часть строки является переменной (удалить пользователь ПЕРЕМЕННОЙ)}

+2

Это оболочка, а не терминал. –

+0

Отредактировано, спасибо. – Shoe

ответ

2

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

$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'); 
} 
+0

Я не совсем понимаю, о чем вы спрашиваете. – Jonah

+0

Ничего, вы отредактировали свое сообщение, ответив на мой вопрос. – Shoe

+0

А, хорошо тогда :) – Jonah

1

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

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

$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; 
} 
Смежные вопросы