2

どのように動作するかを理解するために、PHP を使用して MVC を構築しています。

基本的なフレームワークを確立した後、初期化ファイル ( index.php) に含まれ、後続のすべてのファイルからアクセスできるファイルで共通変数を定義することを思いつきました。調査と途方もない量の試行錯誤の後、私はこれを達成する方法を見つけました。

ビジュアル:

##common.php
# a file of variables used in my project.

$myvar1 = value1;
$myvar2 = value2;
etc...

私は最初、変数が使用されるページで定義されているかのように、common.php ファイル内の変数を参照しようとしましたが、これが機能しないことがわかりました。

ビジュアル:

##page.php
# another page in the same project
# where common.php is included.

//get the value of $myvar1

print $myvar1; // *this does not return value1*

今、変数を$GLOBALS配列の一部として参照しています。

##page.php
print $GLOBALS['myvar1'] // *returns value1*

これらは変数であるため、使用しませんでしdefine(constant, value)た。

私の方法は正しいですか、これを行う別の正しい方法はありますか、それとも完全にベースから外れているのでしょうか?

4

3 に答える 3

2

Registryすべての共有変数を格納するために呼び出されるクラスが必要です。

もちろん、このクラスはすべての MVC フレームワークで共有されるシングルトンです。次のように、ブートストラップ関数で変数を設定します。

$Registry->save('yourVar','yourValue');

そして、MVC にいるときはいつでもこの変数を取得します。

$Registry->get('yourVar');

もちろん、すべてのアプリでこのクラスのインスタンスが必要であるという事実は、グローバル状態の問題をもたらします。詳細については、次の関連する質問を参照してください: If Singletons are bad then why is a Service Container good?

于 2013-03-11T00:41:43.593 に答える
0

$GLOBALS — グローバル スコープで使用可能なすべての変数
を参照します。単にスクリプトのグローバル スコープで現在定義されているすべての変数への参照を含む連想配列です。変数名は配列のキーです。

<?php
function globaltest() {
    $foo = "local variable";

    echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
    echo '$foo in current scope: ' . $foo . "\n";
}

$foo = "Gaint Global content";
globaltest();
?>

$foo in global scope: Gaint Global content
$foo in current scope: local variable

これは、私の友人が構成ファイルに対して行うことです..

<?php
$conf['conf']['foo'] = 'this is foo';
$conf['conf']['fooB'] = 'this is fooB';

function foobar() {
    global $conf;
    var_dump($conf);
}

foobar();

?>

結果は..

配列 'conf' => 配列 'foo' => 文字列 'これは foo' (長さ = 11) 'fooB' => 文字列 'これは fooB' (長さ = 12)

避けることを忘れないでください *print '$GLOBALS = ' . var_export($GLOBALS, true) . "\n";*

グープ!

于 2013-03-11T01:07:08.197 に答える
-2

それらがグローバル変数である場合は、それらにアクセスする関数でそれらを宣言する必要があります。例えば

メインファイルから

 $glbTesting = False ; 

共通ファイルから

 function lg($txt) {
    global $glbTesting;  // this is required otherwise it cannot access the variable called externally

   if ( $glbTesting == True ) 
   {
     echo $txt."<BR>" ; 
   }
   return True;
 }
于 2013-03-11T00:34:20.673 に答える