源码阅读:YAF框架系列文章(1) - (php_yaf.h)

Posted by LB on Wed, Nov 21, 2018

这个文件的核心使命是构建yaf基础定义,这部分定义主要包括

  • 对于内核函数的宏定义
  • 对于框架变量类型的宏定义
  • 对于框架所使用的全局变量进行定义

一、对于内核函数进行宏定义

1#define YAF_STARTUP_FUNCTION(module)   	ZEND_MINIT_FUNCTION(yaf_##module)
2#define YAF_RINIT_FUNCTION(module)		ZEND_RINIT_FUNCTION(yaf_##module)
3#define YAF_STARTUP(module)	 		  	ZEND_MODULE_STARTUP_N(yaf_##module)(INIT_FUNC_ARGS_PASSTHRU)
4#define YAF_SHUTDOWN_FUNCTION(module)  	ZEND_MSHUTDOWN_FUNCTION(yaf_##module)
5#define YAF_SHUTDOWN(module)	 	    ZEND_MODULE_SHUTDOWN_N(yaf_##module)(INIT_FUNC_ARGS_PASSTHRU)

这个部分表现了yaf框架的模块化设计,yaf通过宏定义对于模块相关ZEND函数进行了封装,每个模块都将有自己的模块加载、关闭函数。例如YAF_STARTUP_FUNCTION(module) 的宏定义展开形式就是 zm_startup_yaf_module(int type, int module_number)

二、对于框架自定义变量类型进行定义

 1#define yaf_application_t	zval
 2#define yaf_view_t 			zval
 3#define yaf_controller_t	zval
 4#define yaf_request_t		zval
 5#define yaf_router_t		zval
 6#define yaf_route_t			zval
 7#define yaf_dispatcher_t	zval
 8#define yaf_action_t		zval
 9#define yaf_loader_t		zval
10#define yaf_response_t		zval
11#define yaf_config_t		zval
12#define yaf_registry_t		zval
13#define yaf_plugin_t		zval
14#define yaf_session_t		zval
15#define yaf_exception_t		zval

三、对内核中将用到的函数做声明

1extern PHPAPI void php_var_dump(zval **struc, int level);
2extern PHPAPI void php_debug_zval_dump(zval **struc, int level);

四、声明扩展生命期钩子函数 及 全局变量

1PHP_MINIT_FUNCTION(yaf);
2PHP_MSHUTDOWN_FUNCTION(yaf);
3PHP_RINIT_FUNCTION(yaf);
4PHP_RSHUTDOWN_FUNCTION(yaf);
5PHP_MINFO_FUNCTION(yaf);
6
7extern ZEND_DECLARE_MODULE_GLOBALS(yaf);

五、疑问之处?

1#define YAF_ME(c, m, a, f) {m, PHP_MN(c), a, (uint) (sizeof(a)/sizeof(struct _zend_arg_info)-1), f},