2016-01-27 12 views
5

PHPにJavascriptのような相当ののIIFE(Immediately Invoked Function Expression)があるのだろうかと思います。 PHPクローズを何らかの形で書くことができるので、Javascript(呼び出し、依存、注入、指示)と同様に動作することができますか?PHPでIIFE(即座に呼び出される関数式)?

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

この式は即時呼び出し関数式(IIFE)として知られています。 .jsファイルがロードされると、関数定義はすぐに呼び出されます。 IIFEが効果的な主な理由は、グローバル変数と関数を必要とせずにすべてのコードをすぐに実行できることです。これを行うと、グローバル変数を使用してモジュールを作成しているので、コントローラの作成は失敗します。この問題を回避するには、ゲッター関数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 ありがとう。 PHP 7では

+0

phpコードは、JSは、ホストの理由で、グローバルな回避に同じ優先順位を配置しません。 – dandavis

+0

JSの匿名IIFEパターンは、(ES5変数が関数スコープのみであったため)プライベート変数の類似点を提供することです。パターンは 'function foo(){...}に展開されます。 foo(); 'はどの言語でも実行できます。 – ssube

+2

ただし、IIFEがグローバル変数を作成する点が異なります。 Oo –

答えて

13

、はい、あなたがすることができます

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

これはPHP 5.xで動作しません。代わりに、最も近いあなたが来ることができます:

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

ああ、それは素晴らしいですが、クラウド上の私のIDEプロバイダは5.5.9でPHPをサービスしています。 –

+1

@ ZephyrTeklaはPHP 5.xのソリューションで更新されました。 – jbafford

+0

これは機能しますが、これは一般的には良い考えですか? – Jordan

関連する問題