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();
?>
Это дает мне следующий, сводящий с ума результат:
УВЕДОМЛЕНИЕ:Неопределенная переменная:сообщения в 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");
функция, результат будет тот же.