2012-03-08 24 views
-1

は、私は以下の問題を持っている: -

//index.php 
<?php 

define('PATH','Ajfit/'); 

/* Get all the required files and functions */ 
require(PATH . 'settings.inc.php'); 
require(PATH . 'inc/common.inc.php'); 

?> 

//setting.inc.php 
<?php 
     $settings['language']='English'; 
?> 

//inc/common.inc.php 
<?php 
     //global $settings, $lang, $_SESSION; //$setting = null???? 
     $language = $settings['language']; //$language is still null 
?> 

私はsetting.inc.php内の変数を設定しても、それもヌルに設定されてみてくださいとcommon.inc.php内グローバル変数$設定にアクセス。私がデバッグする場合、私はset.inc.phpからステップアウトすると、$ settings valiableはindex.php内に設定されますが、common.inc.phpに入ると、$ settings valiableはnullに設定されます。

誰にもアイデアはありますか?

+2

なぜここで 'global'を使うのですか?あなたはすでにグローバルスコープ内でコード化しています – Cyclone

+0

正確には、グローバルキーワードは必要ありません。 'echo $ settings ['language'];'は正しい値を出力します。 – nickb

+0

'global'の使用方法と使用方法を確認してください:http://php.net/manual/en/language.variables.scope.php – Maxime

答えて

5

回答:inc/common.inc.phpファイルでは、あなたがglobalキーワードを使用する必要はありません、変数がすでにアクセス可能です。 globalを使用すると、変数が再定義され、nullとなります。

説明:

変数のスコープはここで重要です。 globalキーワードは、範囲が変更された場合にのみ必要です。通常のファイル(include()sを含む)のスコープはすべて同じです。したがって、すべての変数は、異なるファイルからのものであっても、同じスコープ内のどのPHPでもアクセスできます。

globalを使用する必要がある例は、関数の中にあります。関数のスコープは、classスコープとは異なり、プレーンなPHPのスコープとは異なります。

例:

//foo.php 
    $foo = "bar"; 

    echo $foo; //prints "bar" since scope hasn't changed. 

    function zoo() { 
    echo $foo; //prints "" because of scope change. 
    } 

    function zoo2() { 
    global $foo; 
    echo $foo; //prints "bar" because $foo is recognized as in a higher scope. 
    } 

    include('bar.php'); 

//bar.php 
    echo $foo; //prints "bar" because scope still hasn't changed. 

    function zoo3() { 
    echo $foo; //prints "" for the same reason as in zoo() 
    } 

    function zoo4() { 
    global $foo; 
    echo $foo; //prints "bar" for the same reason as in zoo2() 
    } 

詳細情報:

あなたはglobalといないときにを使用する際の詳細情報が必要な場合は、php.net documentation on variable scopeを確認してください。

+0

OK、分かりましたが、common.inc.phpからグローバルラインを完全に削除して$ languageに置き換えました= $ settings ['language'];ただし、$ languageはまだnullで、$設定もnullです。 –

+0

あなたの更新されたコードで質問を編集してください... – Jon

+0

更新されたコードで質問を編集してください。 – Jon

関連する問題