0

在 PHP-5.2.17 的 Zend/zend_execute_API.c 第 358 行

为什么要“zend_is_executing(TSRMLS_C)”?

4

1 回答 1

0

如果您查看源代码,您会看到它get_active_function_name尝试访问执行程序 global function_state_ptr

问题是,这个 executor global 仅在 PHP 代码实际执行时才被初始化。例如,如果一个扩展在调用函数get_active_function_name之前尝试调用,那么如果省略-check,可能会导致 PHP 解释器崩溃。executeget_active_function_namezend_is_executing

因此,检查会阻止get_active_function_name访问未初始化的值,这反过来可能会导致大问题(这只是说“未定义行为”的另一种方式)。

于 2012-11-26T06:39:22.547 回答