Thu 17 May 2007
Zend API:深入 PHP 内核(二十) 参考:关于配置文件的一些宏
Posted by admin under PHP
[2] Comments
由 buildconf 处理的配置文件 config.m4 包含了所有在配置过程中所执行的指令。这些指令诸如包含测试包含所需的外部文件,像头文件、库文件等等。PHP 定义了一系列处理这类情况的宏,其中最常用的我们已经在“表3.18 config.m4 中的 M4 宏”列了出来。
表3.18 config.m4 中的 M4 宏
| 宏 | 说明 |
| AC_MSG_CHECKING(message) | 在执行 configure 命令时输出“checking <message>”等信息。 |
| AC_MSG_RESULT(value) | 取得 AC_MSG_CHECKING 的执行结果,一般情况下 value 应为 yes 或 no。 |
| AC_MSG_ERROR(message) | 在执行 configure 命令时输出一条错误消息 message 并中止脚本的执行。 |
| AC_DEFINE(name,value,description) | 向 php_config.h 添加一行定义: #define name value // description (这对模块的条件编译很有用。) |
| AC_ADD_INCLUDE(path) | 添加一条编译器的包含路径,比如用于模块需要为头文件添加搜索路径。 |
| AC_ADD_LIBRARY_WITH_PATH(libraryname,librarypath) | 指定一个库的连接路径。 |
| AC_ARG_WITH(modulename,description,unconditionaltest,conditionaltest) | 这是一款比较强大的宏,用于将模块的描述 description 添加到“configure –help”命令的输出里面。PHP 会检查当前执行的 configure 脚本里面有没有–with-<modulename> 这个选项。 如果有则执行 unconditionaltest 语句(比如 –with-myext=yes 等), 此时,选项的值会被包含在 $withval 变量里面。否则就执行 conditionaltest 语句。 |
| PHP_EXTENSION(modulename, [shared]) | 这个是配置你的扩展时 PHP 必定调用的一个宏。你可以在模块名后面提供第二个参数,用来表明是否将其编译为动态共享模块。这会导致在编译时为你的源码提供一个 COMPILE_DL_<modulename> 的定义。 |

问一个问题:
php在解析.php文件的时候,是怎么处理include函数的。
include 是一个 PHP 语法的关键字,而不是一个函数。:)
具体流程见 $PHP_SOURCE\Zend 目录下的 zend_language_scanner.l 与 zend_language_parser.y。