可変でユーザ変数を呼びたい

条件によって違うfunctionを呼びたいときも、そらぁある。

例えば、$_GET["code"]が、『1』のときは『_play1()』を、『2』のときは『_play2()』を、呼びたいとするとか、そんな感じ。

コードで言えばこんな感じ。

class aaaa{
   var $call_class = array(
               1 => "_play1",
               2 => "_play2",
           );

   function aaaa(){
       $method = $this->call_class[$_GET["code"]];
       ///// [!!]ここでの実行方法[!!] /////
       $ans = ??????;
   }

   function _play1($aa){
      return "1{$aa}";
   }
   function _play2($aa){
      return "2{$aa}";
   }
}

[!!]の部分が問題になる。

うっかり

$ans = $this->$method($aa);

とやりたいとこではあるんだけど、そうすると

Fatal error: Method name must be a string in ~

となってしまうのだ。
※環境によっては実行されるケドね、裏でログが溜まってたりするよ

解決方法

$ans = call_user_func_array(array($this,$method), array($aa));

または

$ans = call_user_func(array($this,$method), $aa);

よかったね よかったよ。無駄に時間かけたよ…。
どうみても違和感がある引数だが、あえて使って書いた。
そっち状況のが使うし。

コメント

タイトルとURLをコピーしました