0

2 つの php プロジェクトをマージしたいと考えています。どちらのプロジェクトもグローバル変数を使用しているため、個別のグローバル スコープが必要です。

例:

ファイル project1.php:

$var1 = 'var1';

function print1() {
  global $var1;
  echo $var1;
}

print1();

ファイル project2.php:

function load1() {
  include('project1.php');
}

$var2 = 'var2';

function print2() {
  global $var2;
  echo $var2;
}

print2();
load1();

これにより、project2 は期待どおりに実行されますが、project1 は失敗します。これは、$var1 がグローバル スコープではなく、load1() のスコープ内にあるためです。

考えられる修正の 1 つはglobal $var1、load1() を呼び出すことですが、これでは 2 つのグローバル スコープが混在し (乱雑)、複雑になります。なぜなら、reallive project2 には多くのグローバル変数があり、更新ごとに新しい変数があるかどうかを確認する必要があるからです。

したがって、project1 用に別のグローバル スコープを作成できれば最高です。それは可能ですか?

4

2 に答える 2

0

個別のGLOBALコンテキストを持つことはできません。グローバルコンテキストのグローバルの唯一の目的は、何が起こっても「グローバル」になることです。

これを修正するには、グローバル変数を関数の引数にリファクタリングするコードを「コンテキスト化」する必要があります。

function print2() {
  global $var2;
  echo $var2;
}

になる:

function print2($var2) {
  echo $var2;
}
于 2012-09-18T10:50:04.647 に答える
0

インクルードを関数にラップする必要がある場合は、PHP Namespacesを参照してください。

project2.php:

namespace project2 {
    $var2 = 'var2';

    function print2() {
        global $var2;
        echo $var2;
    }

    print2();
}

namespace project1 {
    function load1() {
        global $var1;
        include('project1.php');
    }
    load1();
}
于 2012-09-18T10:47:45.833 に答える