かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP 変数で関数を実行したい。(可変関数)

動的に関数を実行したい事がよくあります。
javascriptだと配列(Object)のキーに関数を入れちゃえば簡単なのですが、
PHPだとよく解らなかったので調べました。(PHPの事はすぐ忘れる...)

まず、PHPには変数に入ってる文字列を関数として使う機能があり、
これを「可変関数 (variable functions)」と言うそうです。
これを覚えておけばググる時に困らない!
同時に、変数に入ってる文字列を変数名として使う機能は「可変変数」と言うそうです。


使い方。

<?php
function myFunc( $arg = "" ) {
  echo "myFunc(); argument = '$arg' \n";
}

$func = 'myFunc';

$func('test');
// 又は
call_user_func($func, '俺だよ!');

CLASS内の関数を呼びたい時

<?php
class Sakura {
  private $name = 'SAKURA';
  function myFunc( $arg = "" ) {
    echo $this->name . "myFunc(); argument = '$arg' \n";
  }
}

$func = 'myFunc';

// classインスタンスから呼び出す
$mySakura = new Sakura();
$mySakura->$func( 'LOVE' );

// classインスタンスを作らずに呼び出す
Sakura::$func( '好き好き大好き超愛してる。' );

// call_user_func_array() で呼び出す
$mySakura = new Sakura();
call_user_func_array( array($mySakura, $func), array( 'おらだよ。オラオラ!' ) );

[参考]
PHP: 可変関数 - Manual
PHPでコールバック関数を利用する - Qiita


PHP5.3からは無名関数をコールバックで渡せるようになったっぽい!