php用eval定义static变量疑问

// 正确方式:
function a(){
    static $c;
    if(empty($c)){
        $c = 'cc';
        echo '<br>init c';
    }
}
a();
a();
// 可以正确的只输出1次init c

// 错误方式:
function a(){
    eval('static $c;');
    if(empty($c)){
        $c = 'cc';
        echo '<br>init c';
    }
}
a();
a();
// 会输出2次init c

怎样才能用eval实现定义static变量呢?因为有个地方需要根据传参确定static变量名。。

阅读 2.3k
1 个回答

首先我不清楚为什么要用这个函数,还有你的程序为什么需要这个函数,难道它是不可替代的吗,而且官方文档说的很明白,这个函数是极其危险的

clipboard.png

其次,再说说静态变量这个东西,它是存在于函数作用域内的,也就是栈里面,一般的函数内变量在函数结束后会释放,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来,就像你的第一个函数。
之后,看你的第二个函数,eval('static $c;'),我们说到了作用域这个东西,看看手册里怎么说的

clipboard.png

这样应该明白了吧,你第二次调用这个函数的时候相当于这个静态变量又被重新定义了一次

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题