php утверждает, что моя определенная переменная является неопределенной

Мой 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();
?>

Это дает мне следующий, невыносимый вывод:

Уведомление: Неопределенная переменная: msgs в C:\wamp\www\fgwl\php-lib\fgwlshared.php на строке 7

Уведомление: Неопределенная переменная: msgs в C:\wamp\www\fgwl\php-lib\fgwlshared.php на строке 7

Уведомление: Неопределенная переменная: msgs в C:\wamp\www\fgwl\php-lib\fgwlshared.php на строке 10

Да, это, как предполагается, совместно используемый файл, но в данный момент я разделил его вниз к, что я вставил. Какие-либо идеи?

9
задан tedders 20 March 2010 в 00:36
поделиться

4 ответа

Он определен в глобальной области видимости. Используйте global если вы хотите его использовать.

10
ответ дан 4 December 2019 в 07:34
поделиться

Использование глобальных объектов для чего-то вроде это плохая практика. Рассмотрим альтернативный подход, например следующий:

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();
5
ответ дан 4 December 2019 в 07:34
поделиться

если вы не хотите использовать глобальные переменные, вы можете просто использовать функцию

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

, результат будет таким же.

1
ответ дан 4 December 2019 в 07:34
поделиться
<?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();
?>

global говорит, что PHP должен использовать глобальную переменную в локальной функции scope.

13
ответ дан 4 December 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: