【问题标题】:When will this happen in PHP?PHP 什么时候会发生这种情况?
【发布时间】:2009-12-25 04:39:32
【问题描述】:

这是一个人为的例子:

function test()
{
    global $a;
    $a=2;
}

test();

//here $a will report undefined variable

echo $a;

我现在以某种方式遇到了这个问题,但我无法以简单的方式重现它!

编辑

我的意思是像 include 或 when

之类的操作

【问题讨论】:

  • 代码对我来说很好......
  • 是的,所以问题是when 它不会工作吗,我无法以简单的方式重现它!
  • 正如没有人指出的那样,这是对global 的滥用。 global 的目的是让已经定义的全局变量在函数的命名空间中可用,而不是在全局命名空间中创建新变量。

标签: php scope


【解决方案1】:

您最近编辑说当您“包含”文件时会发生这种情况。

文件和全局化并不能真正相处。您实际上必须全局输出并输入文件。所以如果 test1.php 有这个代码

$a = 5;

和 test2.php 有这个代码:

$a = 3;

和 test3.php 有这个代码:

$a = 10;

最后(是的,文件太多)testMaster.php 有这个代码

include 'test1.php';
include 'test2.php';
include 'test3.php';
echo $a;

会有一个未定义的变量错误。您必须在每个文件中单独使用全局变量才能将它们全部设置好。

现在,我很确定这不会影响您提供给我们的代码,或者如果包含 function test(),然后调用 test(); 并在其后添加 echo $a;。但是,如果您在与echo $a 不同的文件中定义并调用test(),则会导致全局错误。

我不确定这是否能回答您的问题,但可以,这是包含系统中的一个缺陷。

【讨论】:

    【解决方案2】:

    在您提到的位置获取 未定义变量 的一种方法是,通过没有 global $a; 声明,使 $a 局部于函数 test()。

    <?php
    function test()
    {
        //global $a;
        $a=2;
    }
    
    test();
    
    //here $a will report undefined variable
    
    echo $a;
    ?>
    

    另一个可能是你在echo之后调用函数test():

    <?php
    function test()
    {
        global $a;
        $a=2;
    }
    
    
    //here $a will report undefined variable
    
    echo $a;
    
    test();
    ?>
    

    变量a在打印时还没有初始化,会导致Notice: Undefined variable: a

    您提供的 sn-p 应该可以正常工作。在您回显$a 时,它不再是未定义的,并且在函数test() 中被赋予了一个值。

    【讨论】:

    • 这不是我遇到的问题。有global声明,并且在函数调用之后回显。
    【解决方案3】:

    如果您在 test() 中执行此操作,可能会发生这种情况:

    unset($GLOBALS['a']);
    

    我怀疑你是不是,也许你可以更新你的帖子以提供更类似于你的情况的代码示例。

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 1970-01-01
      • 2021-04-30
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多