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

各位前辈好,我是新学习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页面之间传递,就是前端操心的事情了。

是这样吗?

感谢您的指点!

金泽城
浏览 1719回答 1
1回答

wldraa

php的全局变量的生命周期是在一个请求里。 httpd这个进程是一个后台进程,负责在有请求的时候新开一个线程(进程?)去处理他。新开的那个线程的生命周期就是全局变量的周期。 要实现一个接口里往内存写数据,另一个接口读,可以选择使用 session或者redis(或memcache),如果性能要求不是特别高一般使用数据库
打开App,查看更多内容
随时随地看视频慕课网APP