PHP中带有静态范围变量的未定义变量

PHP中带有静态范围变量的未定义变量,php,Php,我在PHP中使用“static”时遇到问题。这是我的密码: static $a = 12; if(0) { static $b = 11; static $a = 11111; } echo $a.'----------'.$b; 为什么输出为“11111------”并获取“注意:未定义变量:b”这一定是范围问题,但我不确定为什么,因为它不在函数中。不管怎样,我都是这样工作的: static $a = 12; static $b; // <-- notice this if (0) {

我在PHP中使用“static”时遇到问题。这是我的密码:

static $a = 12;
if(0) {
static $b = 11;
static $a = 11111;
}
echo $a.'----------'.$b;

为什么输出为“11111------”并获取“注意:未定义变量:b”

这一定是范围问题,但我不确定为什么,因为它不在函数中。不管怎样,我都是这样工作的:

static $a = 12;
static $b; // <-- notice this
if (0) {
    static $b = 11;
    static $a = 11111;
}
echo $a.'----------'.$b;
静态$a=12;

静态$b;// 作为问题的解决方案,请参考下面的代码片段

 <?php 
     static $a = 12;
     static $b ;
     if(0) {
       static $b = 11;
       static $a = 11111;
      }

     echo $a.'----------'.$b;
    ?>


在上面的代码片段中,变量$b是在if块中定义的。在条件块或循环块中定义的变量只能在该块中访问。因此需要全局声明它。然后只有它才能在全局范围内访问。

您确定
static
的用法吗?请参阅@DarthVader,它在技术上是可以访问的工作…为什么输出是“11111------”而$b是未定义的变量耶,我刚刚看到了这一点@binpang$b未定义是因为范围。@DarthVader但为什么?它不在函数中。。这一定是PHP的某个隐藏的“特性”,我不知道。如果在
if
中定义了$b,则不能在所有语言中的
if
之外使用它。@DarthVader这不是真的。唯一会发生的事情是PHP会触发一个未定义的变量通知。在正常使用情况下,也就是说。我不确定这个
static
关键字..@DarthVader的特殊用法实际上,PHP在这个意义上是独一无二的。示例:@DarthVader我更喜欢“独特”这个词,但我完全同意。你可能想看看。虽然静态变量似乎是个例外。