IIFE (немедленное выражение функции) в PHP?
Интересно, есть ли в PHP эквивалент IIFE (выражение для немедленного вызова функции), как в Javascript? Может ли PHP Closure быть написан так или иначе, чтобы он мог работать аналогично Javascript (вызов, зависимость, внедрение, директива)?
(function(){
myModule = angular.module('myAngularApplication', []);
}());
Вышеупомянутое выражение известно как выражение "Немедленно вызванная функция" (IIFE). Поскольку определение функции будет немедленно вызывать себя всякий раз, когда загружается файл.js. Основная причина, по которой IIFE эффективен, заключается в том, что мы можем немедленно выполнить весь код без необходимости иметь глобальные переменные и функции. Теперь, когда мы это сделаем, создание нашего контроллера не удастся, так как мы использовали глобальную переменную для создания контроллера с модулем. Чтобы обойти эту проблему, воспользуемся функцией getter angular.module, чтобы связать контроллер с модулем. И в то время как мы находимся в этом, почему бы не поместить контроллер в IIFE также.
(function () {
var booksController = function ($scope) {
$scope.message = "Hello from booksController";
}
angular.module('myAngularApplication').controller('booksController', booksController);
}());
Источник: http://www.codeproject.com/Articles/995498/Angular-Tutorial-Part-Understanding-Modules-and Спасибо.
2 ответа
В PHP 7, да, вы можете:
(function() { echo "yes, this works in PHP 7.\n"; })();
Это не работает в PHP 5.x. Вместо этого ближе всего вы можете прийти:
call_user_func(function() { echo "this works too\n"; });
Вы также можете сразу вызвать анонимный класс в php.
<?php new class (0,1) {
public function __construct (int $a, int $b) {
(($a < 1) ? 'var_dump' : 'var_export')(
gettype (($b > 0) ? __FUNCTION__
: (($a > 0) ? microtime (true)
: __LINE__
)))&exit;
}
};