2016-04-19 7 views
0

Ich habe eine Webservice-Klasse mit einer Reihe von privaten Funktionen. Ich habe eine Hauptfunktion, die entscheidet, welche Funktion gemäß dem ersten Parameter des Web-Service-Aufrufs aufgerufen wird.

$actions = [ 
     "CHECK_LOGIN"  => "checkLogin" 
    , "CHECK_FB"  => "checkFB" 
    , "GET_DETAILS"  => "getDetails" 
    , "SAVE_DETAILS" => "saveDetails" 
    , "CHANGE_PWD"  => "saveDetails" 
    , "SEND_ECODE"  => "sendEmailCode" 
] 

So, ist es einfach zu finden, die nach dem Parameter aufrufen Funktion übergeben:

if (!array_key_exists($action, $actions)) 
    $rep = ["status" => STATUS_ERROR, "errMsg" => "Action '$action' unknown"]; 
else { 
    $method = $actions[$action]; 
    $rep = $method($req); 
} 

Mein Problem ist, dass ich nicht „$ method“ nennen kann, was immer es ist (zB " checkFB "), ich muss $ this-> method aufrufen (zB" $ this-> checkFB ") Wie lege ich das $ this-> vor den Funktionsnamen im $ actions-Array ??

+0

es selbst gelöst: – Francesco

+0

Ich habe versucht, "$ this-> Methode" zu nennen, aber was ich brauchte, war "$ this -> $ method" !! ! – Francesco

+0

Mögliches Duplikat von [PHP Eine Instanzmethode mit Aufruf \ _user \ _func innerhalb derselben Klasse aufrufen] (http://stackoverflow.com/questions/4288105/php-call-a-instance-method-with-call-user-- Func-innerhalb der gleichen Klasse) – Aurel

Antwort

1

Sie können es wie folgt tun:

if (!array_key_exists($action, $actions)) 
    $rep = ["status" => STATUS_ERROR, "errMsg" => "Action '$action' unknown"]; 
else { 
    $method = $actions[$action]; 
    $rep = $this->$method($req); 
} 
+0

wOW, danke, das hat es gelöst !!! – Francesco