PHP 检查静态变量是否已声明或初始化?

use*_*301 3 php

我想检查之前是否声明/初始化了静态变量,例如,是否第一次运行具有静态变量的函数。请参阅以下示例代码:

function init_i (){
    // check if $i is set??
    if(isset($i)) echo '$i is static and is set ';


    static $i=0;
    $i++;
    echo "$i<br>";
}

function run_init(){
    init_i();
}

run_init(); //output 1
run_init(); //should output $i is static and is set 2
run_init(); //should output $i is static and is set 3
run_init(); //should output $i is static and is set 4
run_init(); //should output $i is static and is set 5
Run Code Online (Sandbox Code Playgroud)

问题是 isset($i) 似乎永远不会被证明是正确的,即使它是一个静态变量。如何检查是否static $i已设置?

nic*_*ass 5

只需省略默认值,它将是null

static $i;

// check if $i is set??
if(isset($i)){
  echo '$i is static and is set ';
}else{
  // first call, initialize...
  $i = 0;
}

...
Run Code Online (Sandbox Code Playgroud)

isset()如果变量已设置但未设置,则返回 TRUE null

我不明白你这背后的原因是什么,因为你可以检查该值是初始值(0),并且你知道这是第一个调用......