2012-01-25 13 views
11

require_onceが関数内で呼び出された場合、インクルードされたファイルはグローバル変数スコープを拡張しないようです。 どのようにrequire_once関数内からグローバルスコープへのファイルですか?関数内のグローバルスコープへのrequire_once

私は何をしようとしていることは、いくつかの動的モジュールローダーです:

function projects_init() 
{ 
     ... 
     foreach ($projects as $p) { 
       require_once($p['PHPFile']); 

       $init_func = $p['init']; 
       if ($init_func) 
         $init_func(); 
     } 
} 

それはrequire_onceそのように使用することができない場合、このための最も簡単な解決策は何ですか? (重いフレームワークは不要です)

EDIT:PHP 5.2でも動作するはずです。

+0

可能な複製[require_once()のスコープをグローバルに明示的に設定する方法はありますか?](http://stackoverflow.com/questions/8973664/is-there-a-way-to-set-the -scope-of-require-once-globally-once-globally) – Dunhamzzz

+0

インクルードされたファイルにグローバルを設定するか、オートローダー、リフレクションなどで、やりたいこととは別のやりかたをすることができますあなたはもっと多くの情報を私たちに提供することができ、何か良いものを考えることができるかもしれません。私は、異なる方法で達成できるタスクにグローバルスコープを使用するのは本当に好きではありません。 – mobius

+0

ofcあなたは関数内にファイルを含めることができ、そのファイル内にグローバルなものがあれば、グローバルに利用できます。 – Tudor

答えて

5

:グローバルしかし、それは動作するはずです)、例:

function a() { 
    require_once("a.php"); 
} 
a(); 
echo $globalVariable; 

とa.phpファイル内

  1. の機能が問題ではありません、彼らはグローバル変数のためにこのよう

  2. グローバルとにかくなり、2つのオプションがあります:

    • はでグローバルとして宣言インクルードファイル
    • でグローバルとして宣言(私の場合はprojects_init())その機能
+3

3.いいえ、関数内からrequire_onceのグローバルスコープを適用することはできないようです。 (悲しい顔。) –

1

globalを使用して変数をグローバルスコープに入れることができます。

http://php.net/manual/en/language.variables.scope.php

+2

Eh?これはどのように質問に答えますか?機能はどうですか? – TMS

+1

いい視点ね。私はまだ他の関数の中で関数を呼び出すことができます。 http://codepad.org/JvyvP3fU –

+0

ありがとう、それはPHP 5.2でも動作します。 – TMS

4

上記の答えは右である、あなたが必要なものを得るためにglobalを使用することができます。 インクルードされたファイルでは、ファイルの先頭に変数globalを宣言するだけで、コードは関数スコープで実行されますが、グローバル変数が変更されます(はい、注意する必要があります。すべての情報を要約する

global $globalVariable; 
$globalVariable="text"; 
+0

悲しいことに、私は多くのグローバル変数(ソフトウェア開発時にのみ利用可能なものが多い)があるため、「注意してください」はうまくいかず、必要なときには「global」キーワードを追加できません新しい変数。私はグローバルに必要なすべてのファイルを含める必要があると思われます(そのうちの1つを動的に選択する代わりに) – maja

1

機能が問題ではありません(ref):

PHPのすべての関数とクラスは、グローバルスコープを持っています。関数内で定義されていても関数の外で呼び出すことができます。

グローバル変数について:requireなどのスコープに関する既存の質問と同様に、スコープは用途が定義されています。他に何かが必要な場合は、グローバル変数を扱う方法を示す多くの答え(my take)があります。ほとんどの場合、get_defined_varsを使用しています。

関連する問題