预定义变量
在PHP脚本执行的时候,用户全局变量(在用户空间显示定义的变量)会保存在一个HashTable数据类型的符号表(symbol_table)中,而我们用得非常多的在全局范围内有效的变量却与这些用户全局变量不同。
例如: GET, _POST, SERVER, _FILES等变量,我们并没有在程序中定义这些变量,并且这些变量也同样保存在符号表中,从这些表象中我们不难得出结论:PHP是在脚本运行之前就将这些特殊变量加入了符号表。
预定义变量$GLOBALS的初始化
我们以cgi模式为例说明 $GLOBALS的初始化。从cgi_main.c文件main函数开始。
指向顺序:
main()->php_request_startup()->zend_activate()->init_executor()
PHP请求周期中,通过 php_request_startup()也会调用。
$_GET,$_POST等变量的初始化
其它的$_FILES中的size、name等字段,其实现过程与type类似。
预定义变量的获取
变量的存放位置:EG(symbol_table)。