- 本文地址: https://www.laruence.com/2010/09/04/1736.html
- 转载请注明出处
快有一个月没有更新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扩展样板实例.
请问鸟哥,你写yaf这样的扩展框架,是先用php实现了再用c代码实现,还是直接用c来实现
鸟哥,请问yaf有木有php版的代码
[…] 在这里,yaf就是project的名称了(yaf是鸟哥用php扩展的方式实现的一个PHP框架,点击查看详细) 输入后,回车,下一步是输入project的根目录 […]
不知道为什么我在windows下安装失败,求教,说找不到这个dll文件,但是我确定存在的
能不能写了一个ORM类C扩展
我自己也写了一个php框架
我喜欢我自己写那个ORM类
老哥能把你写的分享一下,想用来学习研究。
名字是我QQ邮箱,谢谢
http://pecl.php.net/package/Yaf 没有发现dll版本的哦
@Emma 当然,你也可以自己编译, 🙂
@emma http://pecl.php.net/package/Yaf 这里提供了windows下的dll的下载
你好,我想在windows下进行测试,能否提供以下php5.3.6下开发的dll?先谢过。
@scriptzhang @LongmonHou 我现在手头没有vs环境, 不过Yaf在php5.3 vs2008下是可以随着PHP一起编译成功的, 不妨试试,,谢谢
想在Windows进行测试,也要参与这个项目,对C语言掌握,能不能提供个在php5.3下的开发dll用于测试。
牛x
想拿来在WINDOW测试。能否提供一下DLL文件。。。
峰会上看到博主介绍了此框架心情澎湃,期待新版本发布。
php的运行机制,使得框架的威力大减,不知道做成扩展会怎么样,正有这样的想法,期待楼主早日发布啊
期待2.0
今天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
收到. 呵呵. 的确是好消息. 就是时间表安排没有.
@johnpupu @jacky Hi, 没有停止, 现在是作为我们公司内部自己使用的框架, 基于Yaf重新开发了一个新的类似的框架, 目前还在测试中, 年后会投入使用, 而Yaf也会在这个框架稳定以后, 推出稳定版~ 🙂
感覺停止了一陣子了, 我看subversion 上 trunk 一直停在40
Laruence 加油^^
1. 很不错的项目, 辛苦了. 但是现在停止了吗?
2. 没有做对vc9_NTS的处理.
3. 有群交流吗?
4. Thanks.
[…] Yaf-一个PHP扩展实现的PHP框架 Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2) […]
今年的5年月份的时候就我弄了一个简易的框架,和博主的很相像,并且那时也有想法把其作为一个php的ext,看来你先实现了.
感觉把框架用ext方式实现出来很不错.
很赞,找个好框架是个很费体力的事情,要用很久才看出pros and cons
P.S. IE下显示Yaf_Exception那一行会自动变成Yaf_Exceptio,很诡异,fx就木这问题
今天checkout的源码,编译的时候提示
/usr/local/src/yaf/yaf_router.c:36: error: static declaration of ‘yaf_router_ce’ follows non-static declaration
将代码中static声明去掉之后编译成功。
[…] http://www.laruence.com/2010/09/04/1736.html Yaf-一个PHP扩展实现的PHP框架 风雪之隅 […]
真心求教
看了你的这些文章,感觉不是很系统,有些看不明白。
能不能给点指点?
我想把smarty写成扩展模块。
刚刚做了个demo,实现了简单的变量替换。
希望能得到你的帮助,我找不到你的IM联系方式,请加我QQ,24327475 谢谢
期待ing….
老大写的框架应该VERY WELL….
哈哈哈哈哈 “
@夜猫子 @雪候鸟:
我也想听一下,用扩展做框架的优劣分析 🙂
鸟哥,请教下,框架的文档是如何生成?
鸟哥,为什么现在不能下载了?
[…] Yaf-一个PHP扩展实现的PHP框架 […]
以前我也打算过用扩展的方式来实现框架,但是搞成扩展以后适用范围就比较小了。我个人认为整个框架都用扩展来实现不适合通用型框架,针对特定需求开发的框架用这种方式应该更好。
不管怎么说,还是期待早日放出源代码,我还没写过扩展,不知道这种面向对象的扩展到底是咋样的。
呵呵 谢谢博主了 有没有打包下载的?
我的目的不是找茬,只是提出讨论而已,相信博主是看得出来的
至于前面thinkphp提出的pdo的反驳,我的看法是这样的
拿建筑来类比我们的程序开发,从砖瓦 -> 墙壁、房梁 -> 楼层 -> 完整建筑,是一层一层的抽象和封装
我的看法是,PHP扩展封装到砖瓦这个级别就好了,再做向上的封装就不太合适
框架在我看来,已经是一个比较高级别的封装层次了
除非能够获得数量级的效率提升,10倍或者100倍,否则投入如此多的开发时间以及复杂度提升,算起来有点亏本啊
有意思,但为什么借的ZF的设计思想呢?这跟你的logo貌似又冲突了哦。既然是以快为目标,那么就应该考虑丢掉MVC那一套。ROR的思想很好,我觉得应该可以考虑下:)
封面那只河蟹是干嘛的。。。
@雪候鸟
ok~了解~ 感謝^^
另外有計畫中的roadmap 嗎?
如果有的話 ~
这个框架的实际意义是?
顶啊!学习 PHP Extension 开发
分享创造美好~~
接触PHP时间不是很长,继续观察学习中。
@johnpupu 目前因为是alpha的版本, 不推荐试用, 所以没有提供可以打包下载的版本. 还是等稳定以后再送吧. (起码beta以后)
是否可以在google code 上提供可以下載的版本
因為我想幫yaf送進FreeBSD的ports
若是沒辦法的話, 我會自已從trunk 上抓下來包成一個tar.gz
放到一個 public 網路空間
感謝
看了一遍文档,确实还是很期待的!不过,文档里有些地方写错了。
比如:
(例 5.1)是不是加载(application.library.directory)}/Zend/Dummy/Foo.(application.ext)?
6.4章应该是获取$_SERVER变量的值
都是小问题:) 不要说我鸡蛋里挑骨头呀~
赞!
支持,才Alpha文档已经写得这么全了,赞一个。
向鸟哥学习
鸟哥期待你的源码共享
@夜猫子 恩, 你说话是没有问题的, 只不过Yaf的遵旨是把不变的部分抽象出来, 所以说是逆流, 是不确切的.
@CZ 谢谢指正, 是我疏忽了, 🙂
夜猫子说的很有道理
Yacc的a是another的意思
夜猫子,你用PDO扩展么?没有觉得PDO包装MySQL是逆潮流而动?你用PDO的时候有问题还会自己去修改PDO的源码么?
我顶鸟哥。人家开源共享,还老有人jjww!
我曾经在PHPChina上看到一个人说他打算把框架做成PHP扩展方式,当时我反对了他的看法,所以这次我也打算和您讨论一下这种做法
用扩展方式实现框架,本质基本上等于早期用C语言开发cgi,当然基于PHP的扩展就不用自己去处理HTTP这一块,而且调用上用PHP也比较便于调用
但是,我觉得之所以现在大家都不用C开发cgi,转而使用动态语言(PHP Python Ruby)等等,就是为了调试方便,部署简单
如果其他人在使用中,对框架本身什么地方觉得有问题,只能通过修改扩展的C源程序去改动,这一点您在文档里的开发难点一节也有提到
恕我直言,我认为这种做法是逆潮流而动
如果仅仅是不计成本和结果的个人兴趣,或者仅仅针对特定环境的开发,那另当别论,呵呵
鸟哥威武, 百度强大啊。