PHP


無名関数


PHP 5.3では、無名関数が使える。
無名関数を使えば、変数に関数を代入して実行できる。
http://php.net/manual/ja/functions.anonymous.php

$greet = function($name) {
 print("hello:".$name);
};

$greet("World");
$greet("PHP");

しかし、メンバ変数に入れた場合は、そのままえは実行できない。
http://site.oukasei.com/?p=984

class Hoge {
  public $fn;
}

$h = new Hoge();
$h->fn = function($name) {
 print("hello:".$name);
}

上記のような定義の後、普通に呼び出そうとすると
$h->fn("World"); 
//エラー Fatal error: Call to undefined method Hoge::fn()

括弧でくくっても
($h->fn)("World");
//エラー  Parse error: syntax error, unexpected '('

一度、通常の変数に入れなおして呼び出すか
$x = $h->fn;
$x("World");
//動作する

もしくは、call_user_func();を利用する
call_user_func($h->fn,"World");
//動作する

2013/7/8
最終更新:2013年07月08日 12:18