【问题标题】:PHP switch statement variable scopePHP switch 语句变量作用域
【发布时间】:2010-02-21 15:00:14
【问题描述】:

在 PHP 中,switch 语句中的变量作用域是如何处理的?

例如,举个假设的例子:

$someVariable = 0;

switch($something) {

    case 1:
        $someVariable = 1;
        break;

    case 2:
        $someVariable = 2;
        break;
}

echo $someVariable;

这会打印 0 还是 1/2?

【问题讨论】:

  • 你为什么不试试呢?

标签: php switch-statement scope


【解决方案1】:

整个代码部分中的变量将是相同的:PHP 中没有“每个块”的变量范围。

所以,如果$something12,那么您输入switch 中的case 之一,您的代码将输出1 或2。

另一方面,如果$something 不是1 也不是2 (例如,如果它被视为0,您发布的代码就是这种情况,因为它没有初始化到任何东西),你不会进入任何case 块;并且代码将输出0

【讨论】:

  • 即使 PHP 有词法作用域,$someVariable 仍然可以在 switch 块中访问。
【解决方案2】:

PHP 确实只有一个global and function/method scope。因此,switch 块内的 $someVariable 与外部引用相同的变量。

但是由于 $something 没有定义(至少在您提供的代码中没有),访问它会引发 未定义变量 通知,所有情况都不匹配(未定义变量等于 null) , $someVariable 将保持不变,0 将被打印出来。

【讨论】:

    【解决方案3】:

    它会打印 1 或 2。PHP 中的变量具有整个函数的作用域。

    【讨论】:

      【解决方案4】:

      如果你在 switch 语句中改变$someVariable 的值,它会打印 1 或 2,如果你不改变,它会打印 0。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-25
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        相关资源
        最近更新 更多