【问题标题】:Variable that should be in scope is not [closed]应该在范围内的变量不是[关闭]
【发布时间】:2014-09-13 16:55:06
【问题描述】:

我正在使用$debug 变量来控制我正在测试的函数中的打印语句。尽管 $debug 被声明并初始化为 true 在与函数相同的范围级别,但它在函数内部被视为 false(或 undefined,我猜)。我对 PHP 中变量作用域的理解是错误的吗?我该如何解决这个问题?

我的实际代码要复杂得多,但以下是一个显示相同问题的最小示例。对于它的价值,我在 Mac OS X 10.9.4 上使用 PHP 5.4.24 在命令行上运行它。

<?php

$debug = true;

function myFunction()
{

    if($debug) {
        echo "I'm debugging";
    } else {
        echo "I'm not debugging";
    }
}

myFunction();

?>

对我来说,这个函数显示“我没有调试”。

【问题讨论】:

  • 这是这里的基本范围。 $debug 不在范围内。为什么会这样?
  • @JohnConde 与函数本身处于同一级别。怎么不在范围内?
  • 这不是 JavaScript。在函数外部声明的变量超出范围。 Documentation.
  • 您可以全球化调试变量,但这不是一个好习惯。但是,如果您使用类,则可以通过 $this->debug 访问它。
  • 在这里也可以看到我的回答:stackoverflow.com/questions/15687363/…

标签: php scope


【解决方案1】:

请使用以下代码:

    <?php

    $debug = true;

    function myFunction($debug)
    {

        if($debug) {
            echo "I'm debugging";
        } else {
            echo "I'm not debugging";
        }
    }

    myFunction($debug);

    ?>

该函数需要参数“$debug”才能使用。欢迎来到php! :)

【讨论】:

  • 实际函数myFunction 有更多参数,我不想将$debug 添加到列表中。在这种情况下,我需要全局解决方案。不过感谢您的建议。
  • 然后为此写一个getter/setter..我知道这个问题,这是最简单的解决方法..
  • 我最终使用了一个全局变量,但我认为将它作为参数传递的解决方案是最好的(最佳实践),所以我接受了你的回答。
【解决方案2】:

$debug = true;超出范围,请尝试以下操作:

<?php



function myFunction()
{

   $debug = true;

    if($debug) {
        echo "I'm debugging";
    } else {
        echo "I'm not debugging";
    }
}

myFunction();

?>

你也可以使用global

【讨论】:

  • 至少,他的案子已经有了全球范围..
  • @Tyralcori 他在他的例子中没有使用全局,我不确定你在说什么。这取决于他想做什么。他还可以在函数参数中传递变量。
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 2018-06-29
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多