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

StackOverflow https://stackoverflow.com/questions/2481382

  •  21-09-2019
  •  | 
  •  

Вопрос

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

Это дает мне следующий, сводящий с ума результат:

УВЕДОМЛЕНИЕ:Неопределенная переменная:сообщения в C:\wamp\www\fgwl\php-lib\fgwlshared.php в строке 7

УВЕДОМЛЕНИЕ:Неопределенная переменная:сообщения в C:\wamp\www\fgwl\php-lib\fgwlshared.php в строке 7

УВЕДОМЛЕНИЕ:Неопределенная переменная:сообщения в 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();

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top