2010-12-10 107 views
0

我正在研究一個項目,其中管理面板只是一個根據您輸入的字符串執行一些操作的外殼。 通過殼我的意思是其中鍵入例如製作一個外殼

delete user 1 

和ID爲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

這是一個外殼,而不是一個終端。 – 2010-12-10 17:38:18

+0

編輯,謝謝。 – Shoe 2010-12-10 17:44:10

回答

2

相反一堆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'); 
} 
+0

我不太明白你在問什麼。 – Jonah 2010-12-10 17:53:05

+0

什麼都沒有,你編輯你的消息回覆我的問題。 – Shoe 2010-12-10 18:00:08

+0

啊,那好:) – Jonah 2010-12-10 18:20:42

1

我認爲在空間上爆炸比使用正則表達式更清潔。

你也許能夠清理與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; 
}