Это предметная область.Вы могли бы так же легко - в javascript - написать "var b = function ()".«b» - это просто переменная типа function, определенная в рамках функции a.В PHP и «a», и «b» являются глобальными функциями, но задача «a» - определить «b», поэтому он не будет определен до тех пор, пока не будет вызван «a».Рассмотрим этот пример ...
function a($x) {
if ($x) {
function b() { echo "x not empty"; }
} else {
function b() { echo "x empty"; }
}
}
a(1); // Defines function b
b(); // x not empty
a(0); // PHP Fatal error: Cannot redeclare b() (previously declared...
Если вы не смогли переопределить "b", вы можете увидеть, что "b" - это настоящая функция с глобальной областью действия.Функция «а» может использовать различные критерии для определения функции для конкретной цели в разных прогонах.Понятно, что в этом случае не имеет смысла вызывать функцию «b» до того, как функция «a» решит, как ее определить.
Кстати, я не думаю, что приведенный выше примерочень хорошая практика кодирования, но она служит иллюстрацией.
PHP-код, наиболее похожий на ваш код javascript:
function a() {
$b = function() {
echo "'b' says inner";
};
$b(); // Demonstrating the function can be used inside "a"
}
a(); // 'b' says inner
$ b - это переменная типа function,который может использоваться только внутри функции "a".