<?php
function test1() { echo '<p>Hello, world! (1)</p>'; }
test1();
test2();
function test2() { echo '<p>Hello, world! (2)</p>'; }
if( TRUE ) { function test3() { echo '<p>Hello, world! (3)</p>'; } }
test3();
test4();
if( TRUE ) { function test4() { echo '<p>Hello, world! (4)</p>'; } }
// Hello, world! (1)
// Hello, world! (2)
// Hello, world! (3)
// Fatal error: Call to undefined functi on test4()
Поведение test3() и test4() я понимаю. Знаете, что меня всегда удивляло? Не могу понять, почему test2() всё-таки выполняется. Мистика!
Сначала я думал, что объявления классов и функций происходит в два этапа — сначала «безусловное» при разборе кода, а потом «условное» в runtime. Сейчас я подозреваю, что всё проще: определение ф-ции становится видимым при входе в тот блок, где они объявлены.
P.S. Эй,
