PHP

「PHP」の編集履歴(バックアップ)一覧に戻る

PHP - (2013/07/08 (月) 12:18:14) のソース

[[トップページ]] > 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