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进程当中结束这个类,这个全局变量才消失,道理是和上面举的函数一样的。

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

你可能感兴趣的:(php,内存管理)