你更喜欢面向对象的 PHP 还是 面向过程的 PHP? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
csensix
V2EX    PHP

你更喜欢面向对象的 PHP 还是 面向过程的 PHP?

  •  
  •   csensix 2015-05-18 10:39:55 +08:00 8326 次点击
    这是一个创建于 3866 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我自己从事PHP开发已经快两年,工作中自己写的都是面向过程的,有时出于需要会调用一些第三方库(多数用面向对象实现)。

    别人的库挺好用,只是自己不知道怎样开始写面向对象的代码,觉得很碍手碍脚,没有面向过程来得简介明了。

    不知道各位怎么看。

    37 条回复    2015-05-19 13:38:29 +08:00
    cdwyd
        1
    cdwyd  
       2015-05-18 10:46:06 +08:00
    可以看看这个: http://www.imooc.com/learn/184
    讲的比较细
    m5Rc6ufZ9fj4tdoY
        2
    m5Rc6ufZ9fj4tdoY  
       2015-05-18 10:46:17 +08:00
    面向过程的写法,耦合性有点高吧。
    现在PHP主流的是面向对象,了解下面向对象的语法,可以到慕课网看看,学起来不难。
    66beta
        3
    66beta  
       2015-05-18 10:53:22 +08:00
    讨厌太过于追求OO的PHP代码,比如很多Wordpress插件,明明就那么几个功能,偏要写上N个分开的类
    ChoateYao
        4
    ChoateYao  
       2015-05-18 11:00:10 +08:00
    如果你写的面向过程能更容易的解耦,那么无所谓咯。
    但事实证明OO更方便解耦。
    lincanbin
        5
    lincanbin  
       2015-05-18 11:00:25 +08:00 via Android
    看应用情景
    cvmax
        6
    cvmax  
       2015-05-18 11:01:15 +08:00
    真心还没折腾明白这两个东西
    kookxiang
        7
    kookxiang  
       2015-05-18 11:29:13 +08:00 via Android
    能实现功能的代码就是好代码,一般模型层面向对象,控制层面向过程
    csensix data-uid=
        8
    csensix  
    OP
       2015-05-18 11:30:16 +08:00
    @mangoim
    @cdwyd
    两位是慕课网粉丝么?

    面向过程灵活,适合自己用。面向对象相对死板一些,适合与其他人合作。
    tabris17
        9
    tabris17  
       2015-05-18 11:32:51 +08:00
    不面向对象如何autoload?难道手工include/require?
    kslr
        10
    kslr  
       2015-05-18 11:35:19 +08:00
    @66beta 为了以后扩展呗,现在麻烦,将来省的折腾
    lyragosa
        11
    lyragosa  
       2015-05-18 11:36:44 +08:00
    可以面向对象

    不能为了面向对象而面向对象
    kimmykuang
        12
    kimmykuang  
       2015-05-18 11:42:26 +08:00
    只能说面向对象是PHP社区里的趋势吧,你看下PHP从5.0起陆续给PHP加了多少java/ruby那边儿OO的概念
    tanteng
        13
    tanteng  
       2015-05-18 11:51:36 +08:00
    @66beta wordprss确实,一个简单的功能实现起来都很复杂,简直折腾,但它是面向插件开发的,要做成插件的形式,傻瓜式安装即可使用,又不能改wp源代码,只能这样了。
    csensix
        14
    csensix  
    OP
       2015-05-18 12:05:55 +08:00
    一个现实是,真正的明星产品都是自己的一套东西,不会用到现成的编程框架吧
    fangjinmin
        15
    fangjinmin  
       2015-05-18 12:44:27 +08:00
    不要为了面向对象而面向对象,不用面向对象,用过程也可以写出结构化很好的代码。
    imnpc
        16
    imnpc  
       2015-05-18 12:53:48 +08:00
    面向对象是应对复杂项目的 我建议还是多用面向对象
    zts1993
        17
    zts1993  
       2015-05-18 13:06:11 +08:00 via Android
    混合型

    PHP面向对象太狗屎,绝大多数情况下用类似面向对象方式组织业务逻辑代码就好了。。
    csensix
        18
    csensix  
    OP
       2015-05-18 13:50:57 +08:00
    只是有点担心会因为自己的懒惰而错失一种好的工具
    jinzhe
        19
    jinzhe  
       2015-05-18 13:51:27 +08:00
    面向过程好比走直线
    面向对象好比走曲线

    如果有人说面向对象更好的工程化团队开发,面向过程架构好了一样可以的。
    csensix
        20
    csensix  
    OP
       2015-05-18 14:04:50 +08:00
    @jinzhe 最好的方法就是两种技能都掌握,然后自己选择最合适的一种来使用
    shiny
        21
    shiny  
    PRO
       2015-05-18 14:25:20 +08:00
    复用代码有很多种方式,OO 复用比用函数复用更直观点。
    tomoya92
        22
    tomoya92  
       2015-05-18 14:46:25 +08:00
    面向对象编程比较绕,面向过程编程比较直接
    面向对象的代码看起来费劲,面向过程的代码看起来直接
    面向对象代码的复用性相当高 ,面向过程重复代码很多
    个人见解,大神勿喷
    ajianrelease
        23
    ajianrelease  
       2015-05-18 14:52:47 +08:00
    只喜欢对象这个词^o^
    iugo
        24
    iugo  
       2015-05-18 14:54:51 +08:00
    我还以为大家会一致倾向面向对象.

    看来在 PHP 的使用中, 功能实现比工程设计更重要啊.
    wudikua
        25
    wudikua  
       2015-05-18 15:46:18 +08:00
    面向过程很好用,弄些Class+staticFunction就够了
    m5Rc6ufZ9fj4tdoY
        26
    m5Rc6ufZ9fj4tdoY  
       2015-05-18 16:55:08 +08:00
    @csensix 是,通过慕课网确实学到了些东西,话说面向对象也很灵活的。
    jun4rui
        27
    jun4rui  
       2015-05-18 17:14:04 +08:00
    PHP语言本身根子里面就是面向过程的啊,例如:string bbcode_parse ( resource $bbcode_container , string $to_parse ),基本的函数都是面向过程的。所以学PHP的人不需要在开发中两种思维来回转换,不然真的有点郁闷。

    面向过程和类其实没有那么严重的差异,其实很多超大型的项目也是面向过程的,Linus写Linux还是用的C呢,而且也批评面向对象。如下:

    ================================
    `
    Linux之父Linus Torvalds曾经在三年前,因为微软的一位同学质疑Git用C语言开发,而将C++痛批了一顿(参见Linux之父炮轰C++:糟糕程序员的垃圾语言)。当时,他是这样评论的:

    C++正处在困境当中,它既无助于简化,以实际用于进行原型化或者简单的GUI编程,又不是像C那样的简洁的系统编程语言,能够积极地鼓励你使用简单和直接的语言构造。
    2010年6月5日到11日,他又在邮件列表中连续发贴,直截了当地炮轰C++。他明确表示:“我确实不喜欢C++,依我来看,它真的是一门很烂的语言。”

    他还说,C++语言想解决的问题都不对路,都是一些皮毛问题,而没有涉及真正深层次的问题。C++的对象、模板和函数重载都基本上纯粹是C的语法扩展,是语法糖,总体上把C的语法和类型系统都弄得更糟。他建议,在系统编程里直接用C就可以,非系统编程里,应该选择一种有垃圾收集的语言,C++语言的特性基本无用,只会捣乱。因此,什么时候C++都不可能是正确的选择。

    在另一个帖子中,他进一步说明,内核开发使用C语言而非C++的理由之一,是交流。在庞大的项目中,人们对不是自己开发的模块并不了解,能快速理解其他模块中函数的确切含义才能提高开发效率。而C++引入的各种抽象则使代码非常依赖上下文,想理解一段代码,需要看多得多的上下文。对于需要不断打补丁(小段代码)的内核来说,这是非常要命的。Linus也承认,在其他一些情况下,可能需要更多语言支持,语言级的内存分配机制如垃圾收集、并发、动态代码生成等等。但是内核开发不需要。而且,即使是这些方面,C++也不灵。他不忘嘲笑C++的new关键字很蠢。

    有人问到,C++没有解决的深层次问题是什么?Linus回答,比如并发。他进而又痛批了一通:C++是狗屎,根本没啥设计,只是在C上面加了些渣滓而已。

    有人问Linus对Go语言怎么看。他回答,Go语言里有些不错而且重要的东西值得关注,许多决策都很合理。但设计者自己称这个语言为实验性的,这当然有其原因。而且,引入一种新语言没那么容易,过二十年再说吧。

    此外,Linus还在另一个帖子里痛批了面向对象语言。他认为面向对象语言以对象为核心,加一些相关联的方法,简直是呓语。重要的东西应该是数据结构,对象本身有啥重要?真正有意思的,是在不同类型的不同对象交互而且有锁规则的时候。但是,即使是这时候,封装什么“对象接口”也绝对错误,因为不再是单一对象的问题了。他的结论是,面向对象解决的都是一些小问题。
    `
    jun4rui
        28
    jun4rui  
       2015-05-18 17:27:59 +08:00
    当然,我不是说面向对象无意义,我觉得面向过程和面向对象无明显的高下之分啊,只是每个人的脑子不同,有些可能适合过程,有些可能适合对象。两者也不是不能互相替代。
    yxzblue
        29
    yxzblue  
       2015-05-18 21:06:01 +08:00
    搞对象
    esile
        30
    esile  
       2015-05-18 22:44:09 +08:00
    还是面向‘对象’吧,不然晚上没地方睡觉
    cougar
        31
    cougar  
       2015-05-18 22:48:49 +08:00
    我觉得我写的面向过程比较多,有些项目还没到面向对象就完事了
    lyf362345
        32
    lyf362345  
       2015-05-18 22:56:28 +08:00
    一下子不知道怎么说了, 写了删删了写,
    面向过程简单, 一个方法一个功能, 但是就跟 php 那么多内置方法有时候你却不知道一样.
    面向对象, 就不一样, 概念上, 一个类一个功能点, 比如支付, 比如 oauth, 比如 http 请求, 比如 cookie, session, 相关方法都在里面, 高级点, 继承, 接口, 抽象, 依赖注入(解耦必备), 重载, 各种魔术方法, traits等.
    觉得不是一个量级的东西.
    bdnet
        33
    bdnet  
       2015-05-19 00:25:34 +08:00 via iPhone
    OO 思想写出来的代码更容易维护,或者直接用框架,如laravel
    mN71eOOprFyMsnPx
        34
    mN71eOOprFyMsnPx  
       2015-05-19 00:27:44 +08:00
    不足够nb,写大型项目就知道面向过程是多么的糟糕。
    bdnet
        35
    bdnet  
       2015-05-19 00:29:22 +08:00 via iPhone
    modern php
    sampeng
        36
    sampeng  
       2015-05-19 12:53:42 +08:00
    说面向过程不易于解耦的原因是。。。很少写“纯函数”
    纯函数写多了,就不纠结这个问题了。。
    都是工具而已,看项目大小,看团队情况。
    csensix
        37
    csensix  
    OP
       2015-05-19 13:38:29 +08:00
    大家都说的很好,具体还是要根据项目来
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2847 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 00:20 PVG 08:20 LAX 16:20 JFK 19:20
    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