为了更好的学习php,想写个自己的框架,各位前辈有什么可以指点一下的吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ety001
V2EX    PHP

为了更好的学习php,想写个自己的框架,各位前辈有什么可以指点一下的吗?

  •  
  •   ety001 2012-04-27 21:59:56 +08:00 6275 次点击
    这是一个创建于 4978 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自己学习PHP有段时间了,并且可以用speedphp这样的框架写一些网站出来,并且读过一些框架之类的代码,不过对于框架里的有些东西不是很理解,因此想自己尝试着写一个简单的框架,以此来更好的了解php,不知道各位前辈有什么指教和建议?
    24 条回复    1970-01-01 08:00:00 +08:00
    kojp
        1
    kojp  
       2012-04-27 22:43:24 +08:00
    是个好想法。。。。一直在看kohana跟国内的thinkphp
    amoydavid
        2
    amoydavid  
       2012-04-27 22:59:40 +08:00
    造一个轮子的确对PHP会有更多的认识。然后会有一些全局观。
    LevanLifan
        3
    LevanLifan  
       2012-04-28 00:16:47 +08:00
    仿着rails写一个吧,虽然已经有类似的了,但是不够牛逼。
    xinkiang
        4
    xinkiang  
       2012-04-28 00:28:48 +08:00
    建议学习设计模式,框架除了共用的代码就是一些设计模式在里面了。
    ety001
        5
    ety001  
    OP
       2012-04-28 01:37:31 +08:00
    @xinkiang 说到代码共用,我一直挺头疼这个的,觉得很多时候都是预料不到的,应该是我经验太少的缘故,不知前辈有何前车之鉴?
    ety001
        6
    ety001  
    OP
       2012-04-28 01:38:09 +08:00
    @LevanLifan 个人感觉这个建议对我来说跨度有点大。。。
    ety001
        7
    ety001  
    OP
       2012-04-28 01:39:33 +08:00
    @kojp 我一直想用thinkphp,但是每次都是让他的繁琐的文档给阻挡了,他不像speedphp那样,有个非常简洁的快速入门教程。也或者说是speedphp先入为主了,我有点排斥thinkphp,唉。。
    alex_ilex
        8
    alex_ilex  
       2012-04-28 05:07:10 +08:00
    重新写个或者重写现成的框架让其更适合自己使用.
    coosir
        9
    coosir  
       2012-06-05 21:51:30 +08:00
    @ety001 感觉thinkphp的文档做得挺好的
    sampeng
        10
    sampeng  
       2012-06-05 22:04:16 +08:00
    别写框架。。没意义。。。。。。理由嘛。。。你工作用不到,做出来就是个好看的轮子。。
    tioover
        11
    tioover  
       2012-06-06 13:12:09 +08:00
    @sampeng 造轮子是一个很棒的事情
    AlloVince
        12
    AlloVince  
       2012-06-06 13:38:55 +08:00
    我一直认为自己写框架的前提是深入的用过1-2个框架,并且用现有框架做过中规模以上的项目,否则就是闭门造车
    nigelvon
        13
    nigelvon  
       2012-06-06 13:59:29 +08:00
    开始学就写框架?
    除非你在其他语言领域已经有很深的理解,否则肯定是悲剧。
    hitsmaxft
        14
    hitsmaxft  
       2012-06-06 14:18:18 +08:00   4
    我自己毕业设计的内容就是写个php框架.简单谈谈自己的感想
    我之前2年都是用cakephp进行开发, 没有仔细用过其它框架.
    因此我的入手方式, 先看了Yii的基础实现, 再回头仔细研读cakephp2.0的源代码.
    期间也看过一些简单框架. 最后, 搭建了一个自己的简陋框架, 自己写组件管理和MVC组件, (http管理, 事件机制, 路由管理)使用了cakephp的 用一个简单的port对象翻译相关的配置对象, model架空, 用着redbean; 视图助手用了Yii的一部分.
    最后当然, 理论上是能用, 但是离靠谱还是很远..

    这里还是提醒下楼主,反问几个问题,

    1. 为什么写框架? 既然是开始学, 那么第一目的是学习语言特性.那么首先, 不熟悉PHP的面向对象和代码复用手段,以及内存处理方式, 怎么用php的角度写框架? 这就是注定了这个框架是悲剧的, 最终如果水平不足以驾驭框架的设计, 是写不出合理的框架.
    2. 怎么写框架? PHP语言灵活, 而且杂七杂八的语言特性还有向下兼容的历史问题, 还得挑一个合适的版本.
    3. 什么样的框架? MVC or 轻量型? 理解*设计模式*还有框架*用户*的需求是关键. 引入事件驱动,behavior扩展的方式, 核心组件的工作方式. 这些都需要很多时间和经验.

    最终结论.请仔细研读一个好的框架源码, 弄清楚模块管理,对象继承, 路由机制等等. 写个小型框架满足下自己目前的需求.

    个人推荐, Cakephp2.x, 如果觉得组件和行为部分太杂可以先看1.x的.
    微型框架也可以看看, 代码短, 主要功能也就是import和route两个重点, 作为精华也够了..
    我自己懒得继续写下去了,想立马交差,利用中间层复用了其它框架的组件.
    hitsmaxft
        15
    hitsmaxft  
       2012-06-06 14:22:10 +08:00
    第二点写薄弱了, 大家凑合看吧.
    突然发现回复越长, 余额扣得越多. 穷人伤不起吧
    chloerei
        16
    chloerei  
       2012-06-06 14:34:51 +08:00
    我觉得好的框架是从实用中抽取出来的,Rails 就是这样。
    ety001
        17
    ety001  
    OP
       2012-06-06 15:13:07 +08:00
    @hitsmaxft 14楼给力了,你的问题我会好好思考下的~其实我想写框架的动机主要还是想从头到尾顺一下,看看在php中还有多少是自己不会的,然后利用自己写框架的机会去模仿一些成熟的框架中的思想再写一遍,以求能够学到些有用的东西。
    ety001
        18
    ety001  
    OP
       2012-06-06 15:18:26 +08:00
    @coosir 我个人感觉thinkphp的文档写的很细致,但是缺少一种快速入门的部分。
    hit9
        19
    hit9  
       2012-06-08 02:01:33 +08:00
    @hitsmaxft 最简单的框架是什么?就是完成一个分发请求的功能~说实话,PHP框架一直无法解决的一个问题,也可能是无法解决的吧:开发效率和执行效率的矛盾关系. 做一个PHP框架有了易用性,但势必会丢失执行的效率.只要是PHP框架,都会在性能上打折扣.写一个框架,设计模式,缓存处理.等等等等,,好多.. 我还是坚持自己的"简单"原则,我不肯放弃执行效率.所以..我正在扩展来实现自己的小框架...
    saturn
        20
    saturn  
       2012-06-08 02:15:02 +08:00
    史上最强悍最简单的框架:

    <?php

    // "Talk is cheap. Show me the code." - Linus Torvalds!
    hitsmaxft
        21
    hitsmaxft  
       2012-06-09 23:08:42 +08:00
    @hit9 上面我提到了, 最精简的就是提供router和import(大伙明白的^_^),后者为了组织代码,减少手动管理路径的麻烦,但是可以省略。
    就性能方面吧。我个人觉得一个可以交给缓存和OP缓存去缓解,php的机制就那样了,尽量别把不应该干的活交给PHP脚本去干就是了,其它的也没必要动不动就提性能,代码组织好了,性能问题也就容易定位解决了。

    另外, 我挺认同一个观点, PHP的框架使用来学习的。至少现阶段仍然是这个模样。对于php初学者, 好好用框架, 好好学框架才是正道,毕竟php缺乏好的指导书籍。
    我动手写框架是出于研究和学习的目的。看到Zend和ii里面圈圈套圈圈的面向对象机制我就头晕。

    ps: 鸟哥 @laruence 的作品之一 Yaf,是个扩展级别的框架.
    hit9
        22
    hit9  
       2012-06-09 23:26:10 +08:00
    @hitsmaxft 额..我昨天怎么点的回复你..手误了..~ 恩 ,你说的很棒,赞同
    dongbeta
        23
    dongbeta  
       2012-06-09 23:30:13 +08:00
    写一个,然后扔掉。不相信的话,等一年后再回来看这个帖子。
    ety001
        24
    ety001  
    OP
       2012-06-11 16:23:21 +08:00
    @hitsmaxft 我比较认同你的那个观点,就是“尽量别把不应该干的活交给PHP脚本去干”,现在的甲方总是觉得你会的语言(无论是什么语言)都是全能的...很让人蛋疼!另外就是你@鸟哥,我以为鸟哥也在v2ex注册了呢...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2499 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    ERSION: 3.9.8.5 29ms UTC 06:17 PVG 14:17 LAX 22:17 JFK 01:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86