2012-03-04 22 views
1

我需要調用一個函數,該函數位於類內的另一個函數內部。call_user_func在類方法中的某個函數內不起作用

class Some_class extends CI_Controller { 
    public function file($action){ 
     function add(){ 
      $content = "Content"; 
      $data = array('html'=>$content); 
      $this->output->append_output(json_encode($data)); 
     } 
     call_user_func($action); 
    } 
} 

這不會返回任何內容。

我需要調用函數add(),並且不工作,即使我只是將add()而不是call_user_func()。但是這個想法是調用函數file()中的每個函數。

+1

那麼,你最近怎麼樣*調用函數? '$ action'中有什麼? – 2012-03-04 19:36:48

+0

我通過添加到行動。 – Guilherme 2012-03-04 19:56:22

+0

如果該方法是公開的,人們可以輸入他們想要的任何PHP函數,並且可以執行(儘管沒有參數)。 'http:// example.com/some_class/file/phpinfo'你有沒有考慮過?爲什麼這樣設置,你的實際目標是什麼?這裏似乎沒有必要使用任何'call_user_func'函數。 – 2012-03-04 20:01:39

回答

1

您想通過callback。假設actionMyClass的一種方法。然後你會使用:

$my_class = new MyClass(); 

call_user_func(array($my_class, 'action')); 
+1

看起來他想從'file()'方法調用'add()',我想通過將'add'傳遞給第一個參數。其實我不知道。 – 2012-03-04 19:39:38

+0

點好了。我試圖忽略語法並切回基礎:-) – rjz 2012-03-04 19:40:26

1

雖然我從來沒有親自使用過這個功能,但我認爲它不工作,因爲你沒有返回任何東西。

如果函數$行動應該返回一個值,然後寫:

return call_user_func($action); 

否則(如果它放在一個PARAM的值),這需要設置了一個param,這工作是這樣的:

call_user_func($action, $param); 
return $param; 

也許我誤解了你想要做的事情。

+0

這是一個Codeigniter事物:'$ this-> output-> append_output()'不需要返回值 - 它只是附加到輸出類的' final_output'屬性。真的不清楚OP要做什麼,所以他甚至可能不會調用add(),而確實需要return。所以,好點。 – 2012-03-04 19:55:39

相關問題