2016-01-27 12 views
5

Mi chiedo se PHP abbia un'equivalenza di IIFE (espressione di funzione immediatamente richiamata) come quella di Javascript. È possibile scrivere PHP Closure in modo che possa funzionare in modo simile a Javascript (invocazione, dipendenza, iniezione, direttiva)?IIFE (espressione funzione richiamata immediatamente) in PHP?

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

Questa espressione sopra è nota espressione di funzione come Subito invocata (IIFE). Poiché la definizione della funzione verrà immediatamente richiamata ogni volta che viene caricato il file .js. Il motivo principale per cui l'IIFE è efficace è che possiamo avere tutto il codice immediatamente in esecuzione senza la necessità di avere variabili e funzioni globali. Ora, quando lo facciamo, la nostra creazione del controller fallirà poiché stiamo usando la variabile globale per creare un controller con il modulo. Per aggirare questo problema, utilizzare la funzione getter angular.module per associare il controller al modulo. E mentre ci siamo, perché non mettere il controller in un IIFE troppo.

(function() { 

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

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

Fonte: http://www.codeproject.com/Articles/995498/Angular-Tutorial-Part-Understanding-Modules-and Grazie.

+0

il codice php non pone la stessa priorità su Global-avoidance che JS fa, per una serie di ragioni. – dandavis

+0

Il modello anonimo IIFE in JS è quello di fornire una parvenza di variabili private (poiché le variabili ES5 erano solo a scopo funzionale). Lo schema si espande in 'function foo() {...}; foo(); 'che può essere fatto in qualsiasi lingua. – ssube

+2

eccetto che l'IIFE crea una variabile globale. Oo –

risposta

13

In PHP 7, sì, si può:

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

questo non funziona in PHP 5.x. Invece, il più vicino possibile è:

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

Oh, sarebbe bello ma il mio provider IDE sul cloud continua a fornire servizi PHP a 5.5.9. –

+1

@ZephyrTekla aggiornato con una soluzione php 5.x. – jbafford

+0

Funziona, ma è generalmente una buona idea? – Jordan

Problemi correlati