2

Yii プロジェクトに追加しようとしているレガシー コードに問題があります。

それはグローバル変数と関係があります。代わりにパラメーターとして渡す必要があることはよく知っていますが、この古いコードは他のプロジェクトの書き換えで使用されているため、実際にはオプションではありません。

$testVar = '123';
function testOutput() {
   global $testVar;
   var_dump($testVar);
}
testOutput();

このファイルをプレーンphpファイルに含めると、動作して出力されます

string '123' (length=3)

しかし、このファイルを Yii コントローラーまたはテンプレートに含めると、これが出力されます

null

この問題を検索しようとしましたが、グローバル変数を誤って使用している人々に関する結果がたくさん得られます。実際には Yii の問題ではなく、Yii が設定している php_ini 設定である可能性が高いと確信していますが、これを説明するコードまたは Yii ドキュメントを検索しても何も見つかりません。

この例は、最初のコード ブロックでファイルを作成し、それを Yii テンプレートまたはコントローラーに含めるだけでテストできます。きれいな例の Yii プロジェクトでテストしました。

これは Yii 固有の問題だけではないと感じているので、この質問に Yii のタグを付けて、これを理解する機会を損なわなかったことを願っています。

どんな洞察も大歓迎です。

4

3 に答える 3

5

あなたがこのようにすれば、それはうまくいくでしょう、私はYiiコントローラーでテストしました

global $testVar;
$testVar = '123';
function testOutput() {
   global $testVar;
   var_dump($testVar);
}
testOutput();
于 2013-03-04T20:27:43.727 に答える
2

DCoderが述べたように、クラス、関数/メソッド内でそれらを宣言する場合、それらはグローバルではありません。ただし、それらを$_GLOBALS配列に割り当ててみることができます。

$GLOBALS['testVar'] = 123;

ただし、レガシーコードとその統合方法によっては、一部またはすべてのレガシーファイルの$GLOBALS['thevar']代わりに、$thevarまたはその先頭で使用するように、そのレガシーコード内のすべての参照を変更する必要がある場合があります。extract($GLOBALS)

于 2013-03-04T19:55:01.913 に答える
0

Google で調べた: Yii のグローバル変数

于 2013-03-04T19:48:55.370 に答える