php全局变量的内存管理

话不多说,code is the true。

第一段:

class Globals{

public $var = array();

function __construct(){

 global $_fanwe;

 $_fanwe=2;

 }

}

new Globals();

function Nice(){

global $_fanwe;

echo $_fanwe;

}

Nice();

input :2

第二段:

function globals(){

global $_fanwe;

$_fanwe=2;

}

function Text(){

global $_fanwe;

echo $_fanwe;

}

globals();

Text();

input :2

以上的两个文件分别测试,得出的结果依然是2。原因是全局变量在php编译的时候已经注册了全局变量并且驻足于php内存当中,直到该php的进程结束,php的垃圾回收机制销毁掉这个全局变量。

php在编译时,当某个定义的函数被调用时,php会给该函数分配一定的内存空间和一定的资源作为执行该函数的条件,分给函数的空间无非就是存储变量以及函数执行过程中需要返回的结果,反正这部分空间作为一个php进程里面的空间,所以,当这个函数里面定义了一个全局变量,这个全局变量也将会被放进该函数被分配的内存当中,虽然函数里面定义的全局变量,由于驻足于内存当中,所以可以被其它函数当做真正的全局变量来使用。注意一点,能这么使用的前提是在你使用这个全局变量前一定要让这个全局变量驻足于内存,也就是先调用含有这个全局变量的函数(这是这个全局变量驻足于内存了),你才能使用这个全局变量。为了验证,再来看看下面一段代码以及它的输出:

function globals(){

global $_fanwe;

$_fanwe=2;

}

function Text(){

global $_fanwe;

echo $_fanwe;

}

Text();

其实这个函数是没有任何输出的,因为在Text连$_fanwe没有被赋值,你可能会问在globals这个函数上面不是已经定义$_fanwe;为全局变量而且还为其赋值了么?怎么还没输出呢?对比上段程序,你可以发现并没有调用globals()函数。。没有调用,自然内存没有,你哪能输出?

说这么多,其实类也是一样,一个类没有被实例化之前只是个虚构的定义,并不存在于内存当中,一旦实例化了这个类,php就会给这个类分配内存,驻足于内存,直到这个php进程结束或者在该php进程当中结束这个类,这个全局变量才消失,道理是和上面举的函数一样的。

唉,说这么多是因为研究了一些框架有感而发。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值