[PHP-users 32291] Re: 関数内からinclude_onceコール時のグローバル変数の挙動について

Naoya Harasawa harasawa @ gust.jp
2007年 6月 8日 (金) 11:38:59 JST


include_onceを定義した場所に指定したファイルを含ませることより
動作は正常と思います。

示されたコードより
function load_file()
{
    include_once("inc2.php");
}
は
function load_file()
{
     $global2 = "DEF";
}
書いているのと同じで、$global2はローカル変数になるはずです。

回避したいのでしたら
function load_file()
{
    global $global2;
    include_once("inc2.php");
}
にするべきだと思います。

http://search.net-newbie.com/php/function.include.html
でincludeに関しての説明および同じようなことがかかれていますので、
みてみたらいかがでしょうか。

余談
inc1.phpおよびinc2.phpに
?>が無いんですが、無くても動くんですね。

菊澤 正明 さんは書きました:
> 菊澤 と申します。
> 
> 関数内から、include_onceをコールした場合に、
> インクルードしたファイル内でグローバル変数を定義しているにも
> 関わらず、グローバル変数が未定義となってしまいます。
> 下記に示すコードのinc2.phpで
> $GLOBALS['global2'] = "DEF";
> とすれば、test.phpの未定義エラーは回避できるようですが、
> inc2.php内で$global2が未定義エラーとなってしまいます。
> 
> グローバル変数のスコープがおかしくなっているように思えるのですが、
> これは仕様なのでしょうか?
> 
> 環境は、
> Apache2.0.59
> PHP5.2.0
> Windows XP プロフェッショナル
> です。
> 
> 下記にコードを示します。
> 
> ○test.php
> <?php
> 
> function load_file()
> {
>     include_once("inc2.php");
> }
> 
> include_once("inc1.php");
> load_file();
> 
> print_r($GLOBALS); // global2のエントリがない
> echo $global1;
> echo $global2; // この変数が未定義となる
> 
> ?>
> 
> ○inc1.php
> <?php
> 
> $global1 = "ABC";
> 
> ○inc2.php
> <?php
> 
> $global2 = "DEF";
> 
> 
> 
> --------------------------------------------
> 菊澤 正明  mailto:kikuzawa @ cyber-coo.com
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
> 
> 



PHP-users メーリングリストの案内