条件によって違う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);
よかったね よかったよ。無駄に時間かけたよ…。
どうみても違和感がある引数だが、あえて使って書いた。
そっち状況のが使うし。
コメント