2024年3月13日发(作者:)
细读PHP的生命周期
细读PHP的生命周期
导语:PHP是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利
于学习,使用广泛,主要适用于Web开发领域。下面我们来看看PHP的生命周期,希望
对大家有所帮助。
启动
在调用每个模块的模块初始化前,会有一个初始化的过程,它包括:
初始化若干全局变量
这里的初始化全局变量大多数情况下是将其设置为NULL,有一些除外,比如设置
zuf(zend_utility_functions),以_function = php_printf为例,这里的
php_printf在zend_startup函数中会被赋值给zend_printf作为全局函数指针使用,而
zend_printf函数通常会作为常规字符串输出使用,比如显示程序调用栈的
debug_print_backtrace就是使用它打印相关信息。
初始化若干常量
这里的常量是PHP自己的一些常量,这些常量要么是硬编码在程序中,比如
PHP_VERSION,要么是写在配置头文件中,比如PEAR_EXTENSION_DIR,这些是写在
config.w32.h文件中。
初始化ZEND引擎和核心组件
前面提到的zend_startup函数的作用就是初始化ZEND引擎,这里的初始化操作包
括内存管理初始化、全局使用的函数指针初始化(如前面所说的zend_printf等),对
PHP源文件进行词法分析、语法分析、中间代码执行的函数指针的赋值,初始化若干
HashTable(比如函数表,常量表等等),为ini文件解析做准备,为PHP源文件解析做
准备,注册内置函数(如strlen、define等),注册标准常量(如E_ALL、TRUE、NULL
等)、注册GLOBALS全局变量等。
解析
php_init_config函数的作用是读取文件,设置配置参数,加载zend扩展并
注册PHP扩展函数。此函数分为如下几步:初始化参数配置表,调用当前模式下的ini初
始化配置,比如CLI模式下,会做如下初始化:
INI_DEFAULT("report_zend_debug", "0");
INI_DEFAULT("display_errors", "1");
不过在其它模式下却没有这样的初始化操作。接下来会的各种操作都是查找ini文件:
判断是否有php_ini_path_override,在CLI模式下可以通过-c参数指定此路径(在
php的命令参数中-c表示在指定的路径中查找ini文件)。
如果没有php_ini_path_override,判断php_ini_ignore是否为非空(忽略
配置,这里也就CLI模式下有用,使用-n参数)。


发布评论