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

Мой php немного ржавый, но сейчас это пугает мой разум. Я googled это и прочитал все вопросы 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

Да, это должен быть общий файл, но на данный момент я разделил его на то, что я вставил. Есть идеи?

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

 <?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 должен использовать глобальную переменную в области локальных функций.

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

 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(); 

если вы не хотите использовать глобальные переменные, вы можете использовать jast

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

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