2012-03-04 10 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()を呼び出す必要があります。call_user_func()ではなくadd()を入れても機能しません。しかし、この考え方は、関数内のすべての関数を呼び出すことですfile()

+1

さて、実際に関数を*呼び出す*方法はありますか? '$ action'には何が入っていますか? –

+0

私はアクションにaddを渡します。 – Guilherme

+0

メソッドがpublicであれば、必要なPHP関数をタイプして実行できます(ただし、パラメータはありません)。 'http:// example.com/some_class/file/phpinfo'あなたはそれを考えましたか?なぜそれはこのように設定されています、あなたの実際の目標は何ですか?ここで 'call_user_func'関数のどれかを使う必要はないようです。 –

答えて

1

callbackを渡します。 actionは、MyClassの方法であるとします。

$my_class = new MyClass(); 

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

'file()'メソッドから 'add()'を呼びたいと思うようですが、最初のパラメータに 'add'を渡すと思います。実際に私は考えていない。 –

+0

ポイント獲得。私は構文を見落として、基本的なものに戻そうとしていました:-) – rjz

1

この機能を個人的に使用したことはありませんが、何も返されていないため動作しないと思います。

関数$アクションが書き込み、その後、値を返すことになっている場合は、次の(それはPARAMの値を入れた場合)

return call_user_func($action); 

そうでない場合、それは次のように動作することになる、のparamが必要になります。

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

多分私はあなたが何をしようとしているのか誤解しています。

+0

これはCodeigniterのことです: '$ this-> output-> append_output()'は戻り値を必要としません。これはOuputクラスの ' final_output'プロパティです。 OPが何をしようとしているのかは本当に不明なので、彼は 'add()'を呼んでいなくても、実際には 'return'が必要になるでしょう。だから、良い点。 –

関連する問題