V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
csensix
V2EX  ›  PHP

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

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

    我自己从事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
        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  
       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
    FifiLyu
        34
    FifiLyu  
       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   ·   实用小工具   ·   5989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 02:20 · PVG 10:20 · LAX 18:20 · JFK 21:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.