PHPではif文のブロックの中で関数定義したときは特別な意味を持つ。
例えば、以下の例ではhello関数の定義が二カ所あるがエラーにはならない。
<?php
$a = true;
if ($a) {
function hello() { echo "hello\n"; }
}
else {
function hello() { echo "HELLO\n"; }
}
hello();
実行結果
hello
よく見ると、cfunctionなる記述もある。内部的にも特別に扱われているようだ。
ただ、私はこの機能を実際に活用しているコードをまだ見たことがない。