Я пытался заимствовать некоторые программные парадигмы от JS до PHP (просто для удовольствия). Есть ли способ сделать:
$a = (function(){ return 'a'; })();
Я думал, что с комбинацией use
это может быть хорошим способом скрыть переменные JS style
$a = (function(){ $hidden = 'a'; return function($new) use (&$hidden){ $hidden = $new; return $hidden; }; })();
сейчас мне нужно сделать:
$temp = function(){....}; $a = $temp();
Кажется бессмысленным …
Функция Call Chaining, например, foo()()
обсуждается для PHP5.4. До тех пор, используйте call_user_func
:
$a = call_user_func(function(){ $hidden = 'a'; return function($new) use (&$hidden){ $hidden = $new; return $hidden; }; }); $a('foo'); var_dump($a);
дает:
object(Closure)#2 (2) { ["static"]=> array(1) { ["hidden"]=> string(3) "foo" } ["parameter"]=> array(1) { ["$new"]=> string(10) "<required>" } }
Начиная с PHP7, вы можете немедленно выполнить анонимные функции следующим образом:
(function() { echo 123; })(); // will print 123