PHP 如何实现对代码的面向对象重构 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hithorse
V2EX    PHP

PHP 如何实现对代码的面向对象重构

  •  
  •   hithorse 2014-03-28 10:02:00 +08:00 3902 次点击
    这是一个创建于 4298 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个PHP+mysql项目是面向过程开发的,界面是一层层可折叠的按公司管理层级显示的统计数据。现在老板想要代码重构,弄成面向对象的,要求来一个新客户,能两周搞定。请问怎么重构比较好?
    13 条回复    1970-01-01 08:00:00 +08:00
    lyragosa
        1
    lyragosa  
       2014-03-28 11:27:54 +08:00
    我自己的网站也面临过这种问题。
    曾经是大二的时候学习php+html的时候写的一个练手项目,没啥规划就是写着玩。

    后来发现面向过程控制不住了……然后因为大学那个时候又没啥系统学习(加上本人也不是计算机专业也不太懂底层)代码写得简直乱如麻。
    本来想用后来接触到的框架重制,然后看了CI和TP,感觉等于重写一个。麻烦。

    然后花了差不多半年的业余时间,自制了一个框架 取名Lyragosa Engine 1.0

    现在这个框架升级到了3.5并且已经和项目本身高度耦合……想取出来都不可能了。

    好吧此回答估计对题主没什么帮助,求折叠。
    hithorse
        2
    hithorse  
    OP
       2014-03-28 11:45:01 +08:00
    可否讲讲思路?因为现在有一些客户了,他们的层次结构都不相同,怎么能做这么一个灵活的层次架构显示出来呢?
    sun019
        3
    sun019  
       2014-03-28 12:50:14 +08:00
    用现成的框架 重新
    Actrace
        4
    Actrace  
       2014-03-28 12:50:49 +08:00
    送你一句话:不要老想着重构.
    opennet
        5
    opennet  
       2014-03-28 12:52:56 +08:00
    首先,你得理解什么是面向对象,如果明白,就可以根据你们产品业务逻辑使用PHP的面向对象来重写代码。
    raincious
        6
    raincious  
       2014-03-28 12:55:24 +08:00   1
    这个不叫重构了,叫重建。

    按照数据库建好Model,再按照页面的逻辑建好Controller。除了这个还能咋样?万事开头难呗。先选择好一个框架吧。
    davansy
        7
    davansy  
       2014-03-28 13:05:44 +08:00   1
    先理解下,什么是面向对象,面向对象并不是 用几个class 然后 new 一下就表示这是面向对象。推荐三本书 1. 深入PHP:面向对象、模式与实践(第2版) 2.http://book.douban.com/subject/4746407/ 2.重构 : 改善既有代码的设计 http://book.douban.com/subject/4262627/
    3.设计模式 http://book.douban.com/subject/1052241/
    希望对你有帮助!
    johnsneakers
        8
    johnsneakers  
       2014-03-28 23:29:14 +08:00
    @davansy
    第一本( 深入PHP:面向对象、模式与实践)出第三版了为什么推荐是第一版呢?
    davansy
        9
    davansy  
       2014-03-29 00:10:27 +08:00
    @johnsneakers 那就是最新的第三版!
    konakona
        10
    konakona  
       2014-03-29 01:12:54 +08:00
    1.读懂现在面向过程的代码中核心业务部分
    2.将可以作为函数库的东西单独隔离出来,以便OOP中使用,会很方便
    3.先了解OOP、MVC,最好对CI、TP等这类OO框架至少一个有较深入的使用经验(至少半年),不然你没法写好OOP,你会花很多时间在这上面,又由于项目时间紧缺而做的不伦不类
    4.有一份较为详尽的功能说明文档或功能规格文档。这一条不是必须得,但如果有,你会事半功倍
    5.你可以开始了
    konakona
        11
    konakona  
       2014-03-29 01:14:13 +08:00
    @hithorse 针对客户的需求,灵活的回应。
    林子大了什么鸟都有,什么客户都有,很难一应俱全,但你可以忽悠!
    pubby
        12
    pubby  
       2014-03-29 02:09:58 +08:00
    1. 找个好点的框架重写一个 (A)
    2. 来需求了,复制 (A) -> (B) ,修改 (B) 满足要求
    3. 又来需求了, 从 (A,B)里挑个最接近的, 复制成(C) ,修改之
    .....
    N. 又来.... 总有一款接近需求的吧 哈哈

    想做万能的,太天真了,你永远赶不上需求变化
    picasso250
        13
    picasso250  
       2014-03-30 06:17:24 +08:00
    @lyragosa 答主,你逛知乎逛到这种地步……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     825 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 23:00 PVG 07:00 LAX 15:00 JFK 18:00
    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