各位前辈好,我是新学习php的,以前是用c++的,所以对于php中变量的生命周期总是很困惑,通过多种学习渠道大致弄懂了临时变量的作用域和生命周期,但是对于全局变量还是很疑惑,都说php是一请求一进程的,于是我写了如下两段代码进行测试:in.php 文件:$innumber = 10;echo "全局变量 innumber = ".$GLOBALS['innumber']."<br />";$_SESSION['innumber'] = $innumber;echo "超全局变量 innumber = ".$_SESSION['innumber']."<br />";echo "本进程PID = ".getmypid()."<br />";include 'inB.php';inB.php 文件:echo "全局变量 innumber = ".$GLOBALS['innumber']."<br />";echo "超全局变量 innumber = ".$_SESSION['innumber']."<br />";echo "本进程PID = ".getmypid()."<br />";先执行 in.php,输出:全局变量 innumber = 10超全局变量 innumber = 10本进程PID = 9224全局变量 innumber = 10超全局变量 innumber = 10本进程PID = 9224再执行 inB.php,输出:Notice: Undefined index: innumber in ...全局变量 innumber = Notice: Undefined variable: _SESSION in ...超全局变量 innumber = 本进程PID = 9224我不是很懂为什么执行 inB.php 时,全局变量$GLOBALS['innumber']和超全局变量$_SESSION['innumber']就不存在了呢?假如是一请求一进程,可是我两次执行得到的pid都是一样的,我到系统里看了一下,这个是apache的httpd.exe进程,说明进程是一直存在没有退出过的,于是就更不懂为啥第二次执行inB.php时全局变量就没了?这样子的话,是不是就完全没办法实现:调用A接口时,往后台内存存个数据,等调用B接口时,直接使用内存里的这个数据了?是不是就得由前端来负责这个数据的传递了,就是:调用A接口请求时,带这个数据作为参数;等调用B接口时,还要带上这个数据。至于这个数据怎么在前端的A页面和B页面之间传递,就是前端操心的事情了。是这样吗?感谢您的指点!
1 回答
已采纳
wldraa
TA贡献33条经验 获得超17个赞
php的全局变量的生命周期是在一个请求里。
httpd这个进程是一个后台进程,负责在有请求的时候新开一个线程(进程?)去处理他。新开的那个线程的生命周期就是全局变量的周期。
要实现一个接口里往内存写数据,另一个接口读,可以选择使用 session或者redis(或memcache),如果性能要求不是特别高一般使用数据库
- 1 回答
- 0 关注
- 1714 浏览
添加回答
举报
0/150
提交
取消