13

関数内で呼び出された場合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、これに対する最も簡単な解決策は何ですか?(重いフレームワークは使用しないでください。)

編集:PHP5.2でも機能するはずです。

4

4 に答える 4

7

すべての情報を要約するには:

  1. 関数は問題ではありません、とにかくこのようにグローバルになります

  2. グローバル変数の場合、2つのオプションがあります。

    • 含まれているファイルでグローバルとして宣言します
    • その関数でグローバルとして宣言します(projects_init()私の場合)
于 2012-01-26T09:23:14.757 に答える
5

上記の答えは正しいです、あなたはglobalあなたが必要なものを手に入れるために使うことができます。インクルードされたファイルでは、ファイルの先頭で変数をグローバルに宣言するだけです。このように、コードは関数スコープで実行されますが、グローバル変数が変更されます(はい、注意して、変更する必要があるすべてのものをグローバルとして宣言する必要があります)しかし、それは機能するはずです)、例:

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

およびa.phpファイル:

global $globalVariable;
$globalVariable="text";
于 2012-01-25T12:07:33.880 に答える
2

関数は問題ではありません(ref):

PHPのすべての関数とクラスにはグローバルスコープがあります。関数の内部で定義されている場合でも、関数の外部で呼び出すことができます。その逆も可能です。

グローバル変数について:スコープなどに関する既存の質問requireと同様に、スコープは用途がどこにあるかを定義します。他に何かが必要な場合は、グローバル変数を処理する方法を示す多数の回答(get_defined_varsの見解)があり、ほとんどがを利用しています。

于 2012-01-26T10:24:56.293 に答える
1

を使用globalして、変数をグローバルスコープに配置できます。

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

于 2012-01-25T11:54:19.500 に答える