自从在公司的项目中引入Zend框架,一直对Php实现的框架的效率不太满意,这也是我前段时间学习开发Php扩展的原因之一-其附加结果就是翻译了
编写扩展 系列文章。此后就一直忙于制作下面要介绍的Kiss框架。我的目标是简化、高效、比较通用和好用,所以使用Zend框架之前就对她进行了简化,抽取其中的类加载和控制器部分,并且由于本人具有Java背景(做了2年),也引入了一些Tomcat的特点,比如forward跳转方式和监听器......不废话了,进入v0.1的代码吧。
代码简介:
- 我使用php v5.2.3,主要在64位的Ubuntu 7.10中开发,使用Apache 2.2.4,Php编译为Apache的模块;
- 同时在Windows XP Pro中使用VC6编译成功并测试可用;
- 由于不会用libtool,所以不知道如何将代码拆分到多个文件编译,请不要见笑我的代码管理方式^_^;
- 代码文件:
- php_kiss.h - 模块头文件;
- kiss.c - Php扩展相关代码;
- kiss_inner.c - 实现基本功能,为kiss.c所#include;
- kiss_const.c - 声明了太多的Php常量及相关macro,所以单放在此,为kiss.c所#include;
php_kiss.h:
#ifndef PHP_KISS_H #define PHP_KISS_H
extern zend_module_entry kiss_module_entry; #define phpext_kiss_ptr &kiss_module_entry
/** ... */
#ifdef ZTS #define KISS_G(v) TSRMG(kiss_globals_id, zend_kiss_globals *, v) extern int kiss_globals_id; #else #define KISS_G(v) (kiss_globals.v) extern zend_kiss_globals kiss_globals; #endif
#ifdef ZTS #include "TSRM.h" #endif
#define KISS_VERSION "0.1" #define PHP_EXT ".php" #define CLASS_EXT "Controller" #define ACTION_EXT "Action" #define DEFAULT_MODULE "" #define DEFAULT_CONTROLLER "index" #define DEFAULT_ACTION "index" /** ... */ static PHP_FUNCTION(kiss_eval);
static PHP_FUNCTION(kiss_status); static PHP_FUNCTION(kiss_set_rule); static PHP_FUNCTION(kiss_clear_rules); static PHP_FUNCTION(kiss_front_start); static PHP_FUNCTION(kiss_set_listener); static PHP_FUNCTION(kiss_forward); static PHP_FUNCTION(kiss_redirect); static PHP_FUNCTION(kiss_request_query); static PHP_FUNCTION(kiss_request_post); static PHP_FUNCTION(kiss_request_params); static PHP_FUNCTION(kiss_request_get);
/** ... */
ZEND_BEGIN_MODULE_GLOBALS(kiss) /** life cycle: module */ char dir_sep; char * cfg_file; zend_bool cfg_inited; HashTable hosts_rw; // TODO: 以后使用持久存储或者系统分配内存,以使用全局数据。
HashTable hosts_ls; // TODO: 以后使用持久存储或者系统分配内存,以使用全局数据。
zend_class_entry * action_ce;
zend_class_entry * listener_ce; /* life cycle: request */ kiss_status * status; zval * obj_cache; zval * ls_called; zval * ls_pre_disp; zval * ls_post_disp; kiss_request * request; // TODO: 考虑模块启动时候申请内存
// kiss_response * response; // TODO: 考虑模块启动时候申请内存
ZEND_END_MODULE_GLOBALS(kiss)
#endif /* PHP_KISS_H */
|