Дон Карлос (kastaneda) wrote,
Всё-таки PHP — загадочный язык.

<?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 function test4() 


Поведение test3() и test4() я понимаю. Знаете, что меня всегда удивляло? Не могу понять, почему test2() всё-таки выполняется. Мистика!

Сначала я думал, что объявления классов и функций происходит в два этапа — сначала «безусловное» при разборе кода, а потом «условное» в runtime. Сейчас я подозреваю, что всё проще: определение ф-ции становится видимым при входе в тот блок, где они объявлены.

P.S. Эй, bo_dun, ты это куда пропал?!
Tags: webdev
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded  

  • 9 comments