博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

C-Lua-Erlang-Php

  hshqcn.cublog.cn

关于作者
姓名:Huang Shiqiang
职业:Web程序员
年龄:25
位置:北京
个性介绍:宅
|| << >> ||
我的分类


Kiss - 用Php扩展实现的简单框架
    自从在公司的项目中引入Zend框架,一直对Php实现的框架的效率不太满意,这也是我前段时间学习开发Php扩展的原因之一-其附加结果就是翻译了 编写扩展 系列文章。此后就一直忙于制作下面要介绍的Kiss框架。我的目标是简化、高效、比较通用和好用,所以使用Zend框架之前就对她进行了简化,抽取其中的类加载和控制器部分,并且由于本人具有Java背景(做了2年),也引入了一些Tomcat的特点,比如forward跳转方式和监听器......不废话了,进入v0.1的代码吧。

    代码简介:
  1. 我使用php v5.2.3,主要在64位的Ubuntu 7.10中开发,使用Apache 2.2.4,Php编译为Apache的模块;
  2. 同时在Windows XP Pro中使用VC6编译成功并测试可用;
  3. 由于不会用libtool,所以不知道如何将代码拆分到多个文件编译,请不要见笑我的代码管理方式^_^;
  4. 代码文件:
  • 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 */



未完待续。。。

·Kiss - 用Php扩展实现的简单框架 - 2
·Kiss - 用Php扩展实现的简单框架 - 3
·Kiss - 用Php扩展实现的简单框架 - 4
·Kiss - 用Php扩展实现的简单框架 - 5
·Kiss - 用Php扩展实现的简单框架 - 6 - 使用示例
·Kiss - 用Php扩展实现的简单框架 - 7 - v0.2
·详细的使用介绍 - 1 - 预定义常量(全是整型)
·详细的使用介绍 - 2 - class说明
·详细的使用介绍 - 3 - 函数说明
·详细的使用介绍 - 4 - 特性说明
·详细的使用介绍 - 5 - 详细使用示例
·详细的使用介绍 - 6 - v0.2.2代码&测试代码&dll
·详细的使用介绍 - 7 - TODO
·kiss - v0.2.4
·kiss - v0.3.5
·v0.3.6 & .dll

发表于: 2008-01-22,修改于: 2008-02-14 14:02,已浏览2856次,有评论10条 推荐 投诉


网友评论
网友: dulao5 时间:2008-01-24 12:09:17 IP地址:222.128.39.★
Greate!

网友: hshq_cn 时间:2008-01-24 14:15:21 IP地址:222.70.227.★
改错

上面例子中的配置文件有处笔误:
test.dev/blog
应为
test.dev/admin

网友: hshq_cn 时间:2008-01-24 15:52:32 IP地址:222.70.227.★
如果是缺省模块,HOST后面的‘/’不可省略;
改为
如果缺省模块为"",HOST后面的‘/’可以省略;

网友: cc0cc 时间:2008-02-03 14:30:09 IP地址:210.76.108.★
冒似你没有对php文件中的 class xxController误写时的提示 有什么好办法吗
http://ccq.cosoft.org.cn/cc 

网友: hshq_cn 时间:2008-02-07 17:11:35 IP地址:222.66.8.★
to cc0cc: 是的,应该在这里增加检查,例如在家加载了类文件后检查类是否存在。
非常感谢您提供的建议!

网友: cc0cc 时间:2008-02-17 13:58:46 IP地址:210.76.108.★
老兄,要不然去注册一个开源项目吧,一起来弄这个项目,例如再加上cache什么的。。。。cc0cc at 126.com

网友: hshq_cn 时间:2008-02-18 13:47:35 IP地址:222.64.102.★
呵呵,那些功能以后会酌情加入的;

开源项目,我也考虑过,但是sourceforge,google-code都不会用,呵呵,
当然,主要原因还是起步阶段,不知道有多少人关注参与,如果寥寥,也就等效于一个人;
我在论坛上发帖子问问先。。。

网友: cc0cc 时间:2008-02-21 14:03:11 IP地址:210.76.108.★
http://code.google.com/p/kissext/
老兄,我在google申请了,kiss这名字已经被别的项目注册了,就在后面加了个ext表示是扩展了。。。呵呵。。。赶快过来吧。。。
你在CU bbs里提及到模板,我觉得吧,mvc的v要真正的分离其实是太过于理想了,直接不需要经过解析的php当模板,速度是最快的,逻辑上做到分离了view就是完美的了。。所以没有必要去使用它们。。。

网友: hshq_cn 时间:2008-02-21 15:52:16 IP地址:222.67.156.★
你也太快了,还没确定用哪个呢,就选定了google-code,名字也有了,
行动力果然不是一般的强。

已经存在扩展的模板引擎了,其中的blitz就是,而且官方测试要优于include。

网友: cc0cc 时间:2008-02-21 16:04:36 IP地址:210.76.108.★
今天是元宵,公司提前下班,下班前逛一回。。。
粗看了一下,blitz真是挺强的。。。

元宵节快乐!回家。。。

 发表评论