2010-12-10 18 views
0

Ich arbeite an einem Projekt, bei dem das Admin-Panel nur eine Shell ist, die je nachdem, welche Zeichenfolge Sie eingeben, einige Aktionen ausführt. von Shell bedeuten i ein Eingabefeld, in dem Sie zum Beispiel eingebenErstellen einer Shell

delete user 1 

und den Benutzer mit der ID 1 werden gelöscht. Ich habe dies für etwa 4 Monate geplant und ich habe alle Befehle geschrieben, die die App verwalten konnte. Ich habe ein Problem, dieses System zu machen. Ich dachte über diese Lösung:

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

Aber ich denke, ist es nicht so gut gestaltet, und ich bin sicher, dass es verbessert werden könnte. Mir ist aufgefallen, dass es regulären Ausdruck gibt und dass sie besser sein könnten, aber ich kann nicht wirklich herausfinden, wie man sie im vorherigen Beispiel benutzt. Irgendeine Idee?

+2

Das ist eine Schale ist, kein Terminal. –

+0

Editiert, danke. – Shoe

Antwort

2

Statt eines Bündels {Beachten Sie, dass ein Teil der String-Variable (User VARIABLE löschen)} if-Anweisungen können Sie eine Klasse für jeden Befehl erstellen sollte, der die Informationen als Argument und macht etwas. Sie müssen die Klasse nur laden, wenn sie aufgerufen wird.

$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

Ich verstehe nicht ganz, was Sie fragen. – Jonah

+0

Nichts, Sie haben Ihre Nachricht bearbeitet, die meine Frage beantwortet. – Shoe

+0

Ah, gut dann :) – Jonah

1

Ich denke, explodiert auf Leerzeichen ist sauberer als mit einem Regex.

Sie könnten in der Lage, den Code ein bisschen mit einer switch-Anweisung, um aufzuräumen und Trimmen der Eingabe, bevor Sie sie explodieren:

$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; 
} 
Verwandte Themen