9

私のphpは少しさびていますが、これは今私の心を揺さぶっています. 私はこれをグーグル検索し、関連しているように見えるすべてのstackoverflowの質問を読みましたが、それらにはすべて正当な未定義の変数が含まれているようでした. それは私が同じ問題であると私に信じさせますが、これを削減した単純なコードを見つめても、どこにも行けないようです。誰か私の劣等生の帽子をくれて、私が何を間違えたのか教えてください!

<?php
//test for damn undefined variable error

$msgs = "";

function add_msg($msg){
  $msgs .= "<div>$msg</div>";
}
function print_msgs(){
  print $msgs;
}

add_msg("test");
add_msg("test2");
print_msgs();
?>

これにより、次のような気が狂ったような出力が得られます。

注意: 未定義の変数: 7 行目の C:\wamp\www\fgwl\php-lib\fgwlshared.php の msgs

注意: 未定義の変数: 7 行目の C:\wamp\www\fgwl\php-lib\fgwlshared.php の msgs

注意: 未定義の変数: 10 行目の C:\wamp\www\fgwl\php-lib\fgwlshared.php の msgs

はい、これは共有ファイルであるはずですが、現時点では、貼り付けたものだけに分解しています。何か案は?

4

4 に答える 4

13
<?php
$msgs = "";

function add_msg($msg){
  global $msgs;
  $msgs .= "<div>$msg</div>";
}
function print_msgs(){
  global $msgs;
  print $msgs;
}

add_msg("test");
add_msg("test2");
print_msgs();
?>

globalPHP がローカル関数スコープでグローバル変数を使用する必要があることを示します。

于 2010-03-20T00:39:38.420 に答える
10

グローバルスコープで定義されています。使いglobalたい方はご利用ください。

于 2010-03-20T00:38:24.933 に答える
5

このような目的でグローバルを使用することは、お粗末な方法です。次のような別の方法を検討してください。

class MessageQueue {
  private static $msgs;


  public static function add_msg($msg){
    self::$msgs .= "<div>$msg</div>"; 
  }
  public static function print_msgs(){
    print self::$msgs;
  }
}


MessageQueue::add_msg("test");
MessageQueue::add_msg("test2");
MessageQueue::print_msgs();
于 2010-03-20T15:03:11.500 に答える
1

グローバルを使用したくない場合は、jastを使用できます

 function add_msg($msg)
   {
         echo  "<div>$msg</div>";
   }
    add_msg("test");
    add_msg("test2");

関数、結果は同じになります。

于 2010-03-20T01:33:54.477 に答える