Press "Enter" to skip to content

Yaf-一个PHP扩展实现的PHP框架

快有一个月没有更新Blog了, 一来是最近项目比较紧张, 二来就是在忙着开发Yaf(Yet another Framework)

一直以来, 我研究PHP的内核, 虽然有文章不少, 但却鲜有一些借助这些研究成果而来的, 实际的东西, 也就无法让更多人学习到对Zend API的实际运用.

我思考了一段时间, 觉得有必要写一个扩展出来, 这个扩展要用到很多Zend API, 要用到很多在网上的PHP扩展开发中,鲜有叙及的部分(比如, 实现类/接口, 继承, 自动加载,等等), 让更多的PHP扩展开发者可以借鉴.

最后, 考虑到目前有很多PHP框架, 而这些框架中也有很多很优秀的代表, 比如Zend Framework(因为Yaf是依照Zf来的, 所有特指一下). 这些框架, 运用了很多PHP5以后的新技术, 那么, 如果用扩展写一个类似于她们的框架, 除了能达到我之前想要的扩展教程的目标, 又能很大程度上解决, 框架的性能问题..

至于, 为什么叫Yaf, 是我实在想不到更好的名字了, 就借鉴了Yacc的命名方法, 取名为(yet another framework)

注意, 目前Yaf2.0已经开发完成, 完全新的体系架构和设计. 经过系统的测试, 并且已经在公司多条产品线应用. 请大家暂停使用1.0, 2.0会在文档准备充足后放出.

Yaf本着把框架中不一遍的部分抽象出来, 并且提供灵活的可调整的接口, 实现了类似Zend Framework的如下接口/类:

Yaf_Application
Yaf_Controller
Yaf_View
Yaf_Request
Yaf_Bootstrap
Yaf_Route
Yaf_Config
Yaf_Registry
Yaf_IView
Yaf_Exception

也采用了和ZF一样的dispatchLoop方式, 支持Bootstrap, Plugin. 当然从性能最优考虑, 改变了一些接口类和调用时刻的参数类型.

具体的可以参看: Yaf at PHP.net

Github地址: Yaf at Github

PECL地址: Yaf at PECL

以及一个中文版的手册: Yaf中文手册

目前放出, 供大家挑毛病和提建议, 也希望有兴趣的同学可以参与进来.

最后, 我希望Yaf可以成为一个成功的PHP框架.. 也希望以Yaf能成为一个好的PHP扩展样板实例.

54 Comments

  1. mickelfeng
    mickelfeng August 1, 2013

    请问鸟哥,你写yaf这样的扩展框架,是先用php实现了再用c代码实现,还是直接用c来实现

  2. PoplarDdd
    PoplarDdd January 27, 2013

    鸟哥,请问yaf有木有php版的代码

  3. […] 在这里,yaf就是project的名称了(yaf是鸟哥用php扩展的方式实现的一个PHP框架,点击查看详细) 输入后,回车,下一步是输入project的根目录 […]

  4. vergil
    vergil June 28, 2012

    不知道为什么我在windows下安装失败,求教,说找不到这个dll文件,但是我确定存在的

  5. uuq
    uuq October 21, 2011

    能不能写了一个ORM类C扩展
    我自己也写了一个php框架
    我喜欢我自己写那个ORM类

    • strval
      strval March 11, 2021

      老哥能把你写的分享一下,想用来学习研究。
      名字是我QQ邮箱,谢谢

  6. 雪候鸟
    雪候鸟 August 15, 2011

    @Emma 当然,你也可以自己编译, 🙂

  7. Emma
    Emma August 15, 2011

    你好,我想在windows下进行测试,能否提供以下php5.3.6下开发的dll?先谢过。

  8. 雪候鸟
    雪候鸟 June 23, 2011

    @scriptzhang @LongmonHou 我现在手头没有vs环境, 不过Yaf在php5.3 vs2008下是可以随着PHP一起编译成功的, 不妨试试,,谢谢

  9. scriptzhang
    scriptzhang June 23, 2011

    想在Windows进行测试,也要参与这个项目,对C语言掌握,能不能提供个在php5.3下的开发dll用于测试。

  10. pirate
    pirate May 18, 2011

    牛x

  11. Longmon Hou
    Longmon Hou May 17, 2011

    想拿来在WINDOW测试。能否提供一下DLL文件。。。

  12. Tinking
    Tinking May 10, 2011

    峰会上看到博主介绍了此框架心情澎湃,期待新版本发布。

  13. llitllie
    llitllie May 5, 2011

    php的运行机制,使得框架的威力大减,不知道做成扩展会怎么样,正有这样的想法,期待楼主早日发布啊

  14. rwl
    rwl April 8, 2011

    期待2.0

  15. rwl
    rwl March 26, 2011

    今天checkout的源码,编译的时候提示
    /usr/local/src/yaf/yaf_router.c:36: error: static declaration of ‘yaf_router_ce’ follows non-static declaration
    按照上面注释,编译成功了,但是加载 出现下面提示.php 5.3.6 linux
    PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/yaf.so’ – /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/yaf.so: undefined symbol: yaf_router_ce in Unknown on line 0
    Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/yaf.so’ – /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/yaf.so: undefined symbol: yaf_router_ce in Unknown on line 0

  16. jacky
    jacky February 10, 2011

    收到. 呵呵. 的确是好消息. 就是时间表安排没有.

  17. 雪候鸟
    雪候鸟 February 9, 2011

    @johnpupu @jacky Hi, 没有停止, 现在是作为我们公司内部自己使用的框架, 基于Yaf重新开发了一个新的类似的框架, 目前还在测试中, 年后会投入使用, 而Yaf也会在这个框架稳定以后, 推出稳定版~ 🙂

  18. johnpupu
    johnpupu February 9, 2011

    感覺停止了一陣子了, 我看subversion 上 trunk 一直停在40
    Laruence 加油^^

  19. jacky
    jacky February 9, 2011

    1. 很不错的项目, 辛苦了. 但是现在停止了吗?
    2. 没有做对vc9_NTS的处理.
    3. 有群交流吗?
    4. Thanks.

  20. […] Yaf-一个PHP扩展实现的PHP框架 Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2) […]

  21. df
    df November 24, 2010

    今年的5年月份的时候就我弄了一个简易的框架,和博主的很相像,并且那时也有想法把其作为一个php的ext,看来你先实现了.
    感觉把框架用ext方式实现出来很不错.

  22. yaker
    yaker October 29, 2010

    很赞,找个好框架是个很费体力的事情,要用很久才看出pros and cons
    P.S. IE下显示Yaf_Exception那一行会自动变成Yaf_Exceptio,很诡异,fx就木这问题

  23. gguoyu
    gguoyu October 22, 2010

    今天checkout的源码,编译的时候提示
    /usr/local/src/yaf/yaf_router.c:36: error: static declaration of ‘yaf_router_ce’ follows non-static declaration
    将代码中static声明去掉之后编译成功。

  24. 王岭
    王岭 September 28, 2010

    真心求教
    看了你的这些文章,感觉不是很系统,有些看不明白。
    能不能给点指点?
    我想把smarty写成扩展模块。
    刚刚做了个demo,实现了简单的变量替换。
    希望能得到你的帮助,我找不到你的IM联系方式,请加我QQ,24327475 谢谢

  25. wclssdn
    wclssdn September 28, 2010

    期待ing….
    老大写的框架应该VERY WELL….
    哈哈哈哈哈 “

  26. brightman
    brightman September 26, 2010

    @夜猫子 @雪候鸟:
    我也想听一下,用扩展做框架的优劣分析 🙂

  27. 胖子
    胖子 September 24, 2010

    鸟哥,请教下,框架的文档是如何生成?

  28. 小白
    小白 September 21, 2010

    鸟哥,为什么现在不能下载了?

  29. dualface
    dualface September 16, 2010

    以前我也打算过用扩展的方式来实现框架,但是搞成扩展以后适用范围就比较小了。我个人认为整个框架都用扩展来实现不适合通用型框架,针对特定需求开发的框架用这种方式应该更好。
    不管怎么说,还是期待早日放出源代码,我还没写过扩展,不知道这种面向对象的扩展到底是咋样的。

  30. 夜猫子
    夜猫子 September 6, 2010

    我的目的不是找茬,只是提出讨论而已,相信博主是看得出来的
    至于前面thinkphp提出的pdo的反驳,我的看法是这样的
    拿建筑来类比我们的程序开发,从砖瓦 -> 墙壁、房梁 -> 楼层 -> 完整建筑,是一层一层的抽象和封装
    我的看法是,PHP扩展封装到砖瓦这个级别就好了,再做向上的封装就不太合适
    框架在我看来,已经是一个比较高级别的封装层次了
    除非能够获得数量级的效率提升,10倍或者100倍,否则投入如此多的开发时间以及复杂度提升,算起来有点亏本啊

  31. xqpm
    xqpm September 6, 2010

    有意思,但为什么借的ZF的设计思想呢?这跟你的logo貌似又冲突了哦。既然是以快为目标,那么就应该考虑丢掉MVC那一套。ROR的思想很好,我觉得应该可以考虑下:)

  32. Anonymous
    Anonymous September 6, 2010

    封面那只河蟹是干嘛的。。。

  33. johnpupu
    johnpupu September 6, 2010

    @雪候鸟
    ok~了解~ 感謝^^
    另外有計畫中的roadmap 嗎?
    如果有的話 ~

  34. 卷卷
    卷卷 September 6, 2010

    这个框架的实际意义是?

  35. Bun Wong
    Bun Wong September 6, 2010

    顶啊!学习 PHP Extension 开发

  36. Chinese Interpreter
    Chinese Interpreter September 6, 2010

    分享创造美好~~
    接触PHP时间不是很长,继续观察学习中。

  37. 雪候鸟
    雪候鸟 September 6, 2010

    @johnpupu 目前因为是alpha的版本, 不推荐试用, 所以没有提供可以打包下载的版本. 还是等稳定以后再送吧. (起码beta以后)

  38. johnpupu
    johnpupu September 6, 2010

    是否可以在google code 上提供可以下載的版本
    因為我想幫yaf送進FreeBSD的ports
    若是沒辦法的話, 我會自已從trunk 上抓下來包成一個tar.gz
    放到一個 public 網路空間
    感謝

  39. zhys9
    zhys9 September 6, 2010

    看了一遍文档,确实还是很期待的!不过,文档里有些地方写错了。
    比如:
    (例 5.1)是不是加载(application.library.directory)}/Zend/Dummy/Foo.(application.ext)?
    6.4章应该是获取$_SERVER变量的值
    都是小问题:) 不要说我鸡蛋里挑骨头呀~
    赞!

  40. Rebill
    Rebill September 5, 2010

    支持,才Alpha文档已经写得这么全了,赞一个。

  41. 胖子
    胖子 September 5, 2010

    向鸟哥学习

  42. 烂叶
    烂叶 September 5, 2010

    鸟哥期待你的源码共享

  43. 雪候鸟
    雪候鸟 September 4, 2010

    @夜猫子 恩, 你说话是没有问题的, 只不过Yaf的遵旨是把不变的部分抽象出来, 所以说是逆流, 是不确切的.
    @CZ 谢谢指正, 是我疏忽了, 🙂

  44. zhaiduo
    zhaiduo September 4, 2010

    夜猫子说的很有道理

  45. CZ
    CZ September 4, 2010

    Yacc的a是another的意思

  46. thinkphp
    thinkphp September 4, 2010

    夜猫子,你用PDO扩展么?没有觉得PDO包装MySQL是逆潮流而动?你用PDO的时候有问题还会自己去修改PDO的源码么?
    我顶鸟哥。人家开源共享,还老有人jjww!

  47. 夜猫子
    夜猫子 September 4, 2010

    我曾经在PHPChina上看到一个人说他打算把框架做成PHP扩展方式,当时我反对了他的看法,所以这次我也打算和您讨论一下这种做法
    用扩展方式实现框架,本质基本上等于早期用C语言开发cgi,当然基于PHP的扩展就不用自己去处理HTTP这一块,而且调用上用PHP也比较便于调用
    但是,我觉得之所以现在大家都不用C开发cgi,转而使用动态语言(PHP Python Ruby)等等,就是为了调试方便,部署简单
    如果其他人在使用中,对框架本身什么地方觉得有问题,只能通过修改扩展的C源程序去改动,这一点您在文档里的开发难点一节也有提到
    恕我直言,我认为这种做法是逆潮流而动
    如果仅仅是不计成本和结果的个人兴趣,或者仅仅针对特定环境的开发,那另当别论,呵呵

  48. Fans
    Fans September 4, 2010

    鸟哥威武, 百度强大啊。

Comments are closed.