Мой 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
Да, это, как предполагается, совместно используемый файл, но в данный момент я разделил его вниз к, что я вставил. Какие-либо идеи?
Он определен в глобальной области видимости. Используйте global
если вы хотите его использовать.
Использование глобальных объектов для чего-то вроде это плохая практика. Рассмотрим альтернативный подход, например следующий:
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");
, результат будет таким же.
<?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.