2011-05-26 33 views
0

我在另一個類裏面有一個函數,這樣我就可以在不同的文件夾中組織我所有的'模塊引擎'並調用它們的函數。如何檢查類內的函數是否存在於另一個類中?

例如,我有一個所謂的「mdnewsletter」模塊,該模塊具有內部等其他類:「設置」,「通訊」等

通常,如果我wan't到得到與ID'5'通訊增值稅我這樣做:

$res = $mdnewsletter->newsletter->get(5); 
if($res===false) { /* error handler here */ } 

/* otherwise, the code here */ 

但現在我有一個模塊叫'mdapi'。該模塊的建議是安全地加載另一個模塊的引擎並僅對模塊執行命令。

我的問題是關於這個代碼片段:

  $response = @eval($eval); 
      if($response===false && ($error = error_get_last())){ 
       $this->error[] = "mdapi->exec() | A função fornecida não é uma função válida"; 
       $can_exec = false; 
       $eval = ''; 
       $response = false; 
      }; 

我得到執行字符串有「mdnewsletter-> newsletter->得到」和變量VAR等,我不能用method_exists()。我真的更喜歡閱讀解析錯誤代碼。

如果發生分析錯誤,php代碼將掛起,我不能通知對方代碼不正確或發生錯誤。

我該如何解決這個問題?

編輯: 基於Oktopus答案,我已經寫了動態檢查功能背後的所有對象,然後將其與最後一個對象,這樣的測試功能的代碼:

  // Avaliar se a primeira parte é uma class e os restantes funcoes 
      $tmp = explode ('->', $tmp); 

      // Verificar se são objectos até à função (ultima string) 
      $obj = $$tmp[0]; 
      for($i=0;$i<count($tmp)-1;$i++){ 
       if($i!=0){ 
        $obj = $obj->$tmp[$i]; 
       } 
       if(!is_object($obj)){ 
        $this->error[] = "mdapi->exec() | A variavel '".$tmp[$i]."' não é um objecto!"; 
        $can_exec = false; 
        $eval = ''; 
        $response = false; 
       } 
      } 

      // Verificar se a ultima variavel é uma função no ultimo objecto 
      if(!is_callable(array($obj, $tmp[count($tmp) - 1]))){ 
       $this->error[] = "mdapi->exec() | A função pedida não foi encontrada no ultimo objecto!"; 
       $can_exec = false; 
       $eval = ''; 
       $response = false; 
      } 

回答

1

我贏了「T走在‘它可能是不安全的事’,但這裏是你如何能做到這一點:

//Exemple string : 
$parts = explode ('->', "object->property->testCall"); 
//How to test if it's callable 
if (is_object($$parts[0]->$parts[1])){ 
    echo "it's an object"; 
    if (is_callable(array($$parts[0]->$parts[1], $parts[2]))){ 
     echo "it's callable"; 
    } 
} 
+0

代碼被編輯$$部分[2] => $部件[2] – 2011-05-26 12:24:18

+0

你能解釋一下爲什麼雙$? 我會嘗試現在 – CuSS 2011-05-26 14:07:06

+1

這是一個變量變量:http://www.php.net/manual/en/language.variables.variable.php。 – Bojangles 2011-05-26 14:55:56

相關問題