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

@李彪  November 21, 2018

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

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

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

#define YAF_STARTUP_FUNCTION(module)       ZEND_MINIT_FUNCTION(yaf_##module)
#define YAF_RINIT_FUNCTION(module)        ZEND_RINIT_FUNCTION(yaf_##module)
#define YAF_STARTUP(module)                   ZEND_MODULE_STARTUP_N(yaf_##module)(INIT_FUNC_ARGS_PASSTHRU)
#define YAF_SHUTDOWN_FUNCTION(module)      ZEND_MSHUTDOWN_FUNCTION(yaf_##module)
#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)

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

#define yaf_application_t    zval
#define yaf_view_t             zval
#define yaf_controller_t    zval
#define yaf_request_t        zval
#define yaf_router_t        zval
#define yaf_route_t            zval
#define yaf_dispatcher_t    zval
#define yaf_action_t        zval
#define yaf_loader_t        zval
#define yaf_response_t        zval
#define yaf_config_t        zval
#define yaf_registry_t        zval
#define yaf_plugin_t        zval
#define yaf_session_t        zval
#define yaf_exception_t        zval

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

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

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

PHP_MINIT_FUNCTION(yaf);
PHP_MSHUTDOWN_FUNCTION(yaf);
PHP_RINIT_FUNCTION(yaf);
PHP_RSHUTDOWN_FUNCTION(yaf);
PHP_MINFO_FUNCTION(yaf);

extern ZEND_DECLARE_MODULE_GLOBALS(yaf);

五、疑问之处?

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

评论已关闭