为了账号安全,请及时绑定邮箱和手机立即绑定

请教PHP中全局变量和超全局变量的生命周期

请教PHP中全局变量和超全局变量的生命周期

PHP
金泽城 2017-03-08 16:39:18
各位前辈好,我是新学习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),如果性能要求不是特别高一般使用数据库
查看完整回答
2 反对 回复 2017-03-09
  • 金泽城
    金泽城
    非常感谢您的热心指点,终于明白了。多谢!
  • 1 回答
  • 0 关注
  • 1714 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信