この記事の所要時間: 約 1分7秒
PHPで関数をネストして定義できるんですね。知りませんでした。
PHP:
メソッド内でもネストできます。
PHP:
無意味ですがこんな事もできます。
PHP:
-
<?php
-
function func() {
-
function inner_func() {
-
function inner_inner_func() {
-
function inner_inner_inner_func() {
-
echo 'inner_inner_inner_func' . PHP_EOL;
-
}
-
inner_inner_inner_func();
-
echo 'inner_inner_func' . PHP_EOL;
-
}
-
inner_inner_func();
-
echo 'inner_func' . PHP_EOL;
-
}
-
-
inner_func();
-
echo 'func' . PHP_EOL;
-
}
-
-
func();
-
-
/* output
-
inner_inner_inner_func
-
inner_inner_func
-
inner_func
-
func
-
*/
-
?>
注意点ですが、ネスト関数を呼び出す際はネスト関数の定義後でないとFatal errorが発生します。
PHP:
-
function func() {
-
inner_func(); // Fatal error
-
function inner_func() {
-
}
-
inner_func(); // ok
-
}
さて関数(メソッド)内に定義されているネスト関数ですが、スコープはどうなっているのでしょうか。見た目からすると定義されている関数内でのみ使用可能なように見えるのですが、実は通常の関数と同じくグローバルスコープになっています。
PHP:
ネスト関数を異なるクラスのメソッド内に定義しても名前空間は同じです。関数名がぶつからないようにする必要があります。(PHP4.3.0以降)
うーん、使いどころがあるような無いような。。。メソッド内で関数を動的に定義する時なんかは使えるかも。
参照:PHPマニュアル-関数
- Newer: 法人の確定申告
- Older: CakePHP 1.1環境で1.2を試す
トラックバック:0
- このエントリーのトラックバックURL
- http://www.1x1.jp/blog/2007/01/php_nested_function.html/trackback
- Listed below are links to weblogs that reference
- ネストした関数 from Shin x blog
