if文の中で関数宣言したら?
phpって、こんなコードが書けるのです。
if (false) { function xxx() { return true; } }
これ、どうなるでしょう?
(その前に、こんなコード書く機会あるのかな?)
実行結果
1.通常実行
uirou:~$ php -a Interactive shell php > function test() { return 1; } php > echo test(); 1
2.falseで呼び出せないif文の中で関数を宣言したあとに、関数を呼び出す
php > $bool = false; php > if ($bool) { function test2() { return 2; } } php > echo test2(); Warning: Uncaught Error: Call to undefined function test2() in php shell code:1 Stack trace: #0 {main} thrown in php shell code on line 1
3.if文の判定の変数を変えてから関数を呼び出す
php > $bool = true; php > echo test2(); Warning: Uncaught Error: Call to undefined function test2() in php shell code:1 Stack trace: #0 {main} thrown in php shell code on line 1
4.trueで呼び出せるif文の中で関数を宣言したあとに、関数を呼び出す
php > if ($bool) { function test2() { return 2; } } php > echo test2(); 2
考察
PHPに限らず、プログラムは基本的に上から実行される。
if文が実行されたときに、$boolがfalseなので、if文の中は実行されない。(2.)
その後に$boolが変わったとしても、プログラムの実行が巻き戻るわけではないので、
test2の宣言が起こらず、test2を実行しようとしても動かない。(3.)