【问题标题】:php claims my defined variable is undefinedphp声称我定义的变量未定义
【发布时间】:2011-01-29 16:44:16
【问题描述】:

我的 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();
?>

这给了我以下令人抓狂的输出:

注意:未定义的变量:第 7 行 C:\wamp\www\fgwl\php-lib\fgwlshared.php 中的 msgs

注意:未定义的变量:第 7 行 C:\wamp\www\fgwl\php-lib\fgwlshared.php 中的 msgs

注意:未定义变量:第 10 行 C:\wamp\www\fgwl\php-lib\fgwlshared.php 中的 msgs

是的,这应该是一个共享文件,但目前我已将其剥离为我粘贴的内容。有什么想法吗?

【问题讨论】:

    标签: php variables undefined


    【解决方案1】:
    <?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中使用全局变量。

    【讨论】:

    • 我赞成这个,因为它回答了这个问题,但我必须补充一点,使用全局变量是非常糟糕的做法。放眼全球,立足本地。他们不会无缘无故地将它印在衬衫上。
    • 不客气。但请记住克里斯给出的建议。对于这个例子,发生了什么很清楚,但对于大型(ger)应用程序,它可能会变得混乱和不清楚谁在摆弄哪些变量,因此容易出错。
    【解决方案2】:

    它是在全局范围内定义的。如果要使用,请使用global

    【讨论】:

    • 是的。做到了。看起来我需要复习一下 php 中的作用域。谢谢!
    【解决方案3】:

    在这种情况下使用全局变量是一种糟糕的做法。考虑一种替代方法,例如:

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

    【讨论】:

      【解决方案4】:

      如果你不想使用全局变量,你可以直接使用

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

      函数,结果是一样的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        • 2019-09-18
        相关资源
        最近更新 更多