エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです!

【PHP】関数宣言とif文を組み合わせるとどうなる?【594日目】

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.)

公式ドキュメント

https://www.php.net/manual/ja/functions.user-defined.php