[Пробелы предназначены только для чтения; все они должны работать в одной строке, если требуется.]
В качестве варианта ответа Ислама Эльшобокши вы можете использовать (супер) глобальную переменную вместо оператора use
, чтобы предоставить функции доступ к себе:
foo(
$GLOBALS['x'] = function() {
return $GLOBALS['x'];
}
);
Или вы можете позволить функции найти себя в стеке вызовов, используя debug_backtrace :
foo(
function() {
$backtrace = debug_backtrace();
return $backtrace[1]['args'][0];
}
)
Вдохновленный комментарием от Spudley о возвращении имени функции, вы можете объявить функцию в допустимой области, обернув ее в IIFE :
foo(
(function(){
function f(){ return 'f'; }
return 'f';
})()
);