C の関数ポインタや、Java のリフレクションのように任意の関数、メソッドを呼び出すには次のようにします。
<?php
function greet(){ echo “Hello world!”;}
// 変数に () を付ける記法(関数のみ可)
echo “0: “;
$func=”greet”;
$func();
// call_user_func() を使った関数よびだし
echo “\n1: “;
$func=”greet”;
call_user_func($func);
// call_user_func() を使った静的メソッドよびだし
echo “\n2: “;
class Foo{
function doit(){
echo “static method called”;
}
}
$method=array(“Foo”, “doit”);
call_user_func($method);
// call_user_func() を使った非静的メソッドよびだし
echo “\n3: “;
class Foo2{
var $name;
function Foo2($name){
$this->name = $name;
}
function doit(){
echo “non static method called (“.$this->name.”)”;
}
}
$o=new Foo2(“abc”);
$method=array($o, “doit”);
call_user_func($method);
echo “\n”;
?>
上のコードを実行すると結果は次のようになります。
0: Hello world!
1: Hello world!
2: static method called
3: non static method called (abc)
参考:
– call_user_func()