PHP switch语句中的变量作用域

5
在PHP中,switch语句中如何处理变量作用域?
例如,考虑以下假设示例:
$someVariable = 0;

switch($something) {

    case 1:
        $someVariable = 1;
        break;

    case 2:
        $someVariable = 2;
        break;
}

echo $someVariable;

这会打印0还是1/2?

22
为什么不试一下呢? - Gumbo
5个回答

8
变量在你的代码段中是相同的: PHP中没有变量范围"每个块"。
因此,如果$something是1或2,则会进入switch的其中一个case,您的代码将输出1或2。
另一方面,如果$something不是1也不是2(例如,如果它被认为是0,这是您发布的代码的情况,因为它未初始化为任何内容),则不会进入任何case块;代码输出0。

1
即使 PHP 具有词法作用域,$someVariable 仍然可以在 switch 块中访问。 - Ignas R

6

PHP只有全局和函数/方法作用域。因此,在switch块中的$someVariable指的是与外部相同的变量。

但由于$something未定义(至少在您提供的代码中没有定义),访问它会引发未定义变量通知,没有一个case匹配(未定义变量等于null),$someVariable将保持不变,并且将打印出0


1

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


1

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


-1
为了给你一个普遍正确的答案,我们需要知道$something的值。
如果我们按照你的代码来看,$something将是未定义的...而且由于没有"默认"情况,$someVariable将保持为0。
如果$something是1,$someVariable将是1。
如果$something是2,$someVariable将是2。

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接