2016-01-27 13 views
5

Zastanawiam się, czy PHP ma jakąkolwiek równoważność z IIFE (Natychmiastowe Wywołanie funkcji), podobnie jak w JavaScript. Czy zamknięcie PHP może być napisane tak, aby działało podobnie do Javascriptu (wywoływanie, zależność, wtrysk, dyrektywa)?IIFE (Natychmiastowe wywołanie funkcji) w PHP?

(function(){ 
    myModule = angular.module('myAngularApplication', []); 
}()); 

Wyrażenie powyżej jest znany jako Natychmiast wywołana ekspresja funkcji (Iife). Ponieważ definicja funkcji będzie się uruchamiać natychmiast po załadowaniu pliku .js. Głównym powodem, dla którego IIFE jest efektywny, jest możliwość natychmiastowego wykonania całego kodu bez konieczności posiadania zmiennych globalnych i funkcji. Teraz, gdy to zrobimy, nasze tworzenie kontrolera zakończy się niepowodzeniem, ponieważ użyliśmy zmiennej globalnej do stworzenia kontrolera z modułem. Aby ominąć ten problem, użyj funkcji getter angular.module, aby powiązać kontroler z modułem. A skoro już jesteśmy przy tym, dlaczego nie umieścić kontrolera w IIFE.

(function() { 

    var booksController = function ($scope) { 
     $scope.message = "Hello from booksController"; 
    } 

    angular.module('myAngularApplication').controller('booksController', booksController); 
}()); 

Źródło: http://www.codeproject.com/Articles/995498/Angular-Tutorial-Part-Understanding-Modules-and Dziękuję.

+0

Kod php nie stawia tego samego priorytetu dla unikania globalnego, co JS, z wielu powodów. – dandavis

+0

Anonimowy wzór IIFE w JS ma zapewniać pewne podobieństwo zmiennych prywatnych (ponieważ zmienne ES5 były jedynie zakresem funkcji). Wzorzec rozwija się do 'function foo() {...}; foo(); 'które można zrobić w dowolnym języku. – ssube

+2

z wyjątkiem tego, że twój IIFE tworzy globalną zmienną. Oo –

Odpowiedz

13

W PHP 7, tak, można:

(function() { echo "yes, this works in PHP 7.\n"; })(); 

To nie działa w PHP 5.x. Zamiast tego najbliżej można znaleźć:

call_user_func(function() { echo "this works too\n"; }); 
+0

To byłoby miłe, ale mój dostawca IDE w chmurze nadal obsługuje PHP w wersji 5.5.9. –

+1

@ZephyrTekla zaktualizowano o rozwiązanie php 5.x. – jbafford

+0

Działa, ale czy to na ogół dobry pomysł? – Jordan

Powiązane problemy