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

PHP 之所以如此流行,主要是因为它 quick 的特点比较适合精益开发吧

  •  
  •   wuhaoworld · 2014-07-27 20:55:18 +08:00 · 6195 次点击
    这是一个创建于 3531 天前的主题,其中的信息可能已经有所发展或是发生改变。
    互联网时代唯快不破,同样是一个创意,php “quick and dirty” 的特点可以超快速满足需求,至于代码美不美,用户才看不到,先赢得先机赢得用户比什么都重要
    52 条回复    2014-09-30 14:09:47 +08:00
    em70
        1
    em70  
       2014-07-27 21:17:16 +08:00 via Android
    谁说php代码不美,不但快,随便写的代码不用优化性能也不错。

    另外,php为web而生,其他事情干不好。其他语言,可以做web,还能做别的。
    lidashuang
        2
    lidashuang  
       2014-07-27 21:23:04 +08:00
    写web,rails开发效率不比php慢,你昨不用。
    tushiner
        3
    tushiner  
       2014-07-27 21:27:06 +08:00   ❤️ 6
    。。。。。不讨论语言的好坏是做好程序员的第一步。。。。。
    TangMonk
        4
    TangMonk  
       2014-07-27 21:39:36 +08:00
    @lidashuang 上手要比 php 麻烦点吧
    akfish
        5
    akfish  
       2014-07-27 22:23:18 +08:00   ❤️ 1
    语言有什么好讨论的,我基本上每个项目都会用完全不同的技术去做。
    好的开发者不应该去追求把某种语言/平台撸到出老茧,熟能生巧猴子都做得到,只要时间足够。
    迅速吸收新技术转化为生产力,才是真的快。
    越是见得少,就越喜欢停留在自己能看到的范围内自我陶醉:你看我能把xxx撸得飞快!xxx是全宇宙最好的!
    zts1993
        6
    zts1993  
       2014-07-27 22:34:32 +08:00
    瓶颈又不在语言,快才是王道。
    xuwenmang
        7
    xuwenmang  
       2014-07-27 23:05:35 +08:00   ❤️ 2
    因为有wordpress,因为有drupal,因为有joomla。
    reeco
        8
    reeco  
       2014-07-27 23:59:52 +08:00
    天下武功,唯快不破
    这是我05年看《功夫》时现在还记得的一句台词
    jsonline
        9
    jsonline  
       2014-07-28 01:35:25 +08:00 via Android
    嗯,PHP是最好的语言,我服。但我就是不写PHP
    nine
        10
    nine  
       2014-07-28 02:40:20 +08:00   ❤️ 3
    php流行不是因为开发快,而是门槛低。

    环境好搭建,程序只要一个ftp传上去就行了,不需要编译,不需要重启。
    加上各种开源程序一堆堆,普通文科生随便学学拿来改点东西就接单了。

    至于“快”,呵呵,做demo速度还行,复杂度高点的项目就不行了,而且没有好轮子。
    缺少最佳实践的方案,问过很多人,都是自己整出一套私有的,而且不好用。

    自己写过php框架,试过python node go 。最终到了ruby,发现什么东西在这儿都TM是现成的,其他别的语言的方案都是抄袭ruby的,NND。

    用coffee写js(可以自动编译的),用slim写view ,简洁的model(看着YII定义的那一坨东西我就想死,还没我自己框架的ActiveRecord好用),一气呵成的migration,太爽了(YII是通过表生成model你造吗?)。
    代码表达力太强了,从来没想过我能用一个13寸屏写了半年代码。(之前都是双Dell 2412还不太够用)

    但就是部署稍微麻烦点。但总体上速度,呵呵,我只能说php弱爆了。


    不讨论语言的好坏?呵呵。
    好吧,我不讨论,我自己偷偷用ruby爽就好了。闭嘴多做实在事,精进技术,省的被喷。相信大部分rubyer的也都是这么想的吧。
    tjmao
        11
    tjmao  
       2014-07-28 02:54:26 +08:00 via iPhone   ❤️ 1
    真的不是因为各种免费或收费的cPanel PHP空间吗……
    yakczh
        12
    yakczh  
       2014-07-28 07:11:58 +08:00
    quick and dirty
    wangdaimishu
        13
    wangdaimishu  
       2014-07-28 08:08:17 +08:00
    主要是够简单,我一个做java的朋友,拿着php手册看了半天就可以动手开始做,虽然代码写的不忍直视,但是边看边做,很快东西就出来了,然后放服务器上去跑的还很Hi,其他语言是没法做到这点的。
    wangdaimishu
        14
    wangdaimishu  
       2014-07-28 08:17:05 +08:00
    @nine Yii只是默认通过表生成model,实际上model不仅可以用来做数据库的表映射,还能用来收集表单数据,可以说任何跟数据有关的你都可以通过model来处理,功能非常强大。

    然后Yii的ActiveRecord不好用,大概是因为Yii1的的查询很多时候都需要你传入一个CDbCriteria对象,或者传递一个数组,确实没有 AR::find()->where()->andWhere()这样来的直观。

    ROR确实很强大,这点大家都承认,但是没必要仅仅是了解了一下其他框架,并没有做深入的体验就断然否定一个框架,这可不像是一个做技术人员的态度。
    mongodb
        15
    mongodb  
       2014-07-28 08:35:05 +08:00
    @jsonline 楼主哪里有半点提到“PHP是最好的语言了”……

    PHP是这个世界上最糟糕的语言没有之一,但要比快速成型和部署容易程度,还要考虑进去楼主的语境里提到的快并不只是语言效率高,写东西快,还要考虑到可能的人才招募容易度,容错度——

    在比quick and dirty上,没有一个语言能和PHP比,这方面它还真的是世界上最好。
    mongodb
        16
    mongodb  
       2014-07-28 08:37:28 +08:00
    大部分时候的初级网站开发——也即楼主所说的语境下,先花上三个小时写个东西出来,然后用12小时完善并上线的这种情况,用什么语言都差不多,但PHP在这种情况下不会落后,开发效率的差别仅仅是大家对各自语言的熟悉程度和打字速度。
    mactalk
        17
    mactalk  
       2014-07-28 08:39:22 +08:00
    @nine 就是,php这种小学生玩的垃圾跟ruby根本没法比
    xlmo
        18
    xlmo  
       2014-07-28 08:58:51 +08:00
    恩,除了自家媳妇,别人的老婆都不是人。楼上某些人的心态真的有问题。
    lazyphp
        19
    lazyphp  
       2014-07-28 09:11:10 +08:00
    @xuwenmang 我认同你的观点。 PHP真的是因为受 wordpress 这些产品影响才会有这么多人学PHP。至少我是因为用wordpress才学PHP的。
    muziyue
        20
    muziyue  
       2014-07-28 09:15:00 +08:00
    @lazyphp 佩服,学了一点多点PHP,wordpress的源码我至今不敢看
    zhouzm
        21
    zhouzm  
       2014-07-28 09:26:49 +08:00
    伪命题,请问TIOBE排行榜前10哪个语言不流行了?

    要说上手快,phthon不比php差多少吧

    如果看后续发展,php也许还会流行较长的时间,但总体来说,下跌的最快。最终被python和javascript追上只是时间长短问题
    ren2881971
        22
    ren2881971  
       2014-07-28 09:39:16 +08:00
    上手快、开发快、项目多、便于接私活、以上
    TangMonk
        23
    TangMonk  
       2014-07-28 09:46:54 +08:00
    @nine node 也有很多 module,也是有现成的啊
    TangMonk
        24
    TangMonk  
       2014-07-28 09:49:29 +08:00
    php 中的 drupal 是个很好的东西,社区也不错

    drupal 的一些 module 的解决方案也不错,有时候遇到实现一个功能有问题的时候,常常去参考 drupal module 的源码。
    mactalk
        25
    mactalk  
       2014-07-28 09:50:36 +08:00
    @TangMonk 差多了,node 不过是抄袭 ruby 的渣
    TangMonk
        26
    TangMonk  
       2014-07-28 09:54:42 +08:00
    @mactalk 。。。好吧,既然你这样想,我无话可说
    lijsh
        27
    lijsh  
       2014-07-28 09:58:22 +08:00
    各有各的使用场景吧,PHP只是让我看起来不爽,语法有点丑。
    teavoid
        28
    teavoid  
       2014-07-28 10:01:20 +08:00
    我觉得为毛要把自己定义成 php程序员,python程序 或者 ruby程序员,语言是工具,而不是定义。
    trimleo
        29
    trimleo  
       2014-07-28 11:02:57 +08:00
    月经贴。。
    yangkeao
        30
    yangkeao  
       2014-07-28 11:10:16 +08:00
    @mactalk node在很多情况下比ruby要快些。并且更容易上手。

    就是那个异步callcallcallcallcallbackbackbackbackback很坑。
    yangkeao
        31
    yangkeao  
       2014-07-28 11:11:34 +08:00
    @mactalk 虽然我也很喜欢ruby,但是ruby和node.js我并不觉得有什么哪个好哪个坏。

    好奇心胜的我都想学好啊~~~
    jasontse
        32
    jasontse  
       2014-07-28 11:51:31 +08:00 via iPad
    #如何让一个社区的人吵起来系列
    #钓鱼帖系列
    maddot
        33
    maddot  
       2014-07-28 12:30:50 +08:00
    就像作家,从来都不是因为他们使用的语言而分出优劣,而是因为他们的作品

    我想起小时候一些村里外出务工的人们,谈起外面的世界时的观点,他们认为自己说的方言,是天下间最好听的。
    robertlyc
        34
    robertlyc  
       2014-07-28 12:51:09 +08:00
    web框架

    ruby/rails一档

    其他语言随意
    kisshere
        35
    kisshere  
       2014-07-28 13:09:55 +08:00 via Android   ❤️ 1
    一谈到编程语言or编辑器,phper和DWer就只能说,你们聊吧,我先走了,而这时高逼格就该大显身手了,虽然他们自己做的东西惨不忍睹
    imn1
        36
    imn1  
       2014-07-28 13:32:59 +08:00
    10年来,我见过php vs c/c++, php vs java/jsp, php vs asp/.net, php vs python……
    10年来,php一直存在……甚至存在于不屑php的那些人心中
    10年来,各种讨论似乎都离不开“美不美”、“正规不正规”、“开发快慢”……似乎没什么人关心客户体验、服务器环境配置,每个人都只考虑自己舒服么?

    一般论的前提下,语言怎么样影响的是技术团队,客户体验影响的是收入来源,硬件适应度影响的是成本效益,在一个商业运作上,后两者永远都要比程序员工作做得是否“舒服”来得重要

    如果一个页面,只需print、echo一些内容,但要给上千万、上亿人浏览的,结合服务器配置你会选什么语言?
    如果一个页面,要精确计算地球到火星的最远点距离,但只给不到10个人查看的,结合服务器配置你会选什么语言?

    试试从商业角度讨论一下,满负荷,忽略其他损失,如果每个页面响应多一秒,年内会损失多少客户PV?
    http连接95%以上都是短连接,尽快完成并结束一个连接,腾空给下一个,才是web的王道,即使做前端的也该明白这点
    kmvan
        37
    kmvan  
       2014-07-28 14:19:10 +08:00 via Android
    不要去鄙视任何一种语言,他们都是人类智慧的结晶
    MarioLuisGarcia
        38
    MarioLuisGarcia  
       2014-07-28 16:03:35 +08:00
    You're not the language, and the language isn't you.
    breestealth
        39
    breestealth  
       2014-07-28 16:10:30 +08:00
    说某某语言在另一种语言面前是渣的各位,难道你们不知道基本上当前PHP、Python、Ruby、Node之类的在Java面前就是玩具么?

    讨论语言毫无意义。
    insub
        40
    insub  
       2014-07-28 16:17:07 +08:00
    @nine 部署用mina,不麻烦
    yangxiongwei
        41
    yangxiongwei  
       2014-07-28 17:09:23 +08:00
    Java的轮子应该是最多的
    nine
        42
    nine  
       2014-07-28 18:30:49 +08:00   ❤️ 1
    @imn1 你这想法基本就是停留在表面,根本没有深层次的思考。细节决定成败。

    @breestealth 根本就不是语言层面的差距,而是整个生态环境的差距。

    @TangMonk 我没有深入了解过node,估计你也没有深入了解过吧。某次ruby聚会上,某个女程序员对node的module的吐槽,各种坑,和ruby比简直天差地别

    @wangdaimishu

    收集表单数据我知道,我说的不是这个。YII查询貌似也不需要非要传递一个CDbCriteria,而且传递CDbCriteria也没有什么不妥的。

    而且我在刚开始用Rails的时候甚至觉得觉得缺少一个类似这样的玩意。
    (用在哪个场景我忘了)



    而真正是在多人协同的时候,需要同步表结构的时候,问题就来了。
    开发A在表a增加了一个字段,开发B在表a增加了另外一个字段,这时候怎么同步呢?最原始的方法是用navicat手工同步,一条一条比对,极其容易出错,当表结构变化超过5次,已经没人能说的清誰先谁后、哪个是最终正确的表结构了。


    我在用自己的框架的时候也有这个问题,我在各种php论坛、群里询问这个问题,多方查资料,线下咨询。(因为当时还是想做自己的框架)
    觉得应该可以做成“表结构版本控制”的东西,把表结构变化文件化,然后用git等版本控制工具同步变化。

    后来发现rails里面的migration好像就是这个玩意。
    然后想到Django里的syncdb 好像也是做这个的,当时回想起n年前买过一本Django的书,里面明确说明“Django是很智能的,即使你在文件里写明了删除某个字段,实际syncdb也不会删除,为了避免部署的时候删错东西”,我简直瀑布汗。。。。
    (后来我也没有去考证到底在哪一页,python的书我基本都扔了,就留了一本python cookbook)。

    刚刚我又搜了一下The Django Book,找到了类似的东西
    http://djangobook.py3k.cn/2.0/chapter05/


    ~~~~~~~~~~~~~~~
    syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb 并 不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理。 (更多内容请查看本章最后的“修改数据库的架构”一段。)
    ~~~~~~~~~~~~~~~
    不过我没找到“修改数据库的架构”这一段。

    我研究python的web开发主要还是在2010年左右,可能现在python社区有解决方案,只是我不知道(请谅解)


    然后某天看到YII里也有migration,但是这明显是一个后补进的设计,因为YII并没有强制使用migration来生成表结构,也许是为了好上手吧。

    但我们可以强制团队必须使用migration,于是流程是什么呢?

    1 写migration文件
    2 运行migration ,生成表结构
    3 根据表结构生成model文件

    而rails是
    1 rails g model model_name 直接生成model文件和migration文件
    2 写migration文件
    2 $rake db:migrate 根据建立表结构


    由此可以看出来YII的migration是可以砍掉的,目的是为了某些不想写migration或压根不想了解migration的人,手工建表也可以使用yii框架的其他功能。

    而Rails则是赤裸裸的由ruby代码+ruby命令行来控制一切。



    此时我们比较一下2个model文件
    发现rails的model只有2行
    1 class SourceHtml < ActiveRecord::Base
    2 end

    而YII的model里面洋洋洒洒。

    这时候你说了,YII的model里面写的东西可以用来写验证和生成表单,Rails其实也是可以的。

    然后我们看看YII的model里写了多少无趣的东西
    public static function model($className=__CLASS__)
    {
    return parent::model($className);
    }
    每个方法在model里面都有,OMG!
    dont repeat your self好吗?

    我自己的的框架里是不需要定义这个方法的,因为
    我的ActivRecord里是这样写的
    static public function model(){
    $class_name = get_called_class();
    if (is_callable("{$class_name}::instance")) {
    return $class_name::instance();
    }
    return new static;
    }


    而YII的CActiveRecord是这样的
    public static function model($className=__CLASS__)
    {
    if(isset(self::$_models[$className]))
    return self::$_models[$className];
    else
    {
    $model=self::$_models[$className]=new $className(null);
    $model->attachBehaviors($model->behaviors());
    return $model;
    }
    }

    对比了一下我知道为什么了,用new static的做法在IDE没有智能提示的,所以YII妥协了,要显式的传递一个__CLASS__进去


    而我又在model里发现了这样的东西
    public function rules()
    {
    return array(
    array('user_id, last_time, last_ip', 'numerical', 'integerOnly'=>true),
    array('player_name', 'length', 'max'=>255),
    array('id, player_name, user_id, last_time, last_ip', 'safe', 'on'=>'search'),
    );
    }

    public function attributeLabels()
    {
    return array(
    'id' => 'ID',
    'player_name' => '玩家昵称',
    'user_id' => '平台用户',
    'last_time' => '最后登录时间',
    'last_ip' => '最后登录ip',
    );
    }

    这意味着什么?这些代码都是由表结构生成的。我不知道把表结构复制出来一份放到model里的意义何在。
    于是我们需要修改表结构的时候,要酱紫
    1 写migration
    2 运行migration
    3 ?
    运行完migration之后,model里的rules() attributeLabels() 是不会改变的,model里的代码需要手工再修改一遍,而且绝对不止这两个method。如果表结构修改比较多,呵呵。。。

    当然你可以运行gii什么的,重新生成一遍model文件,但结果是,自己手工写的代码会被覆盖掉。所以这个操作是个绝对危险的动作。


    所以也有很多人php开发不喜欢用框架。
    其实原因是:用不合理的设计,搞了一堆一堆半半拉拉的自动化工具,做了一个蹩脚的不完整的解决方案,还楞要人家学习和使用。用的人不烦才怪。
    80% * 80% * 80% = 51.2% , 还不及格
    我还见过更极端的,坚决不用YII,要用YII他就闪人。

    我不知道Laravel是个什么情况,看过文档,基本算是rails在php这边做的复制吧。
    不过既然有了iPhone,谁还用小米。


    年前某个公司boss让我带团队,我说用ruby吧,他同意了,后来又反悔了,团队已经学了并用rails做项目一个月了,丫硬非要改回php。直接闪人。

    还是那句话“细节决定成败”,python node go php 基本都看过了,不是单是语言好坏,主要在于社区气质,只有ruby社区是最有追求极致的气质,果断皈依。
    refear99
        43
    refear99  
       2014-07-28 20:10:48 +08:00
    为翻页添砖加瓦,"PHP是最好的语言!!!"
    anewg
        44
    anewg  
       2014-07-28 20:20:49 +08:00   ❤️ 1
    Ruby 讲的是一个情怀
    TangMonk
        45
    TangMonk  
       2014-07-28 20:33:27 +08:00
    @nine

    node的个别 module 有 bug 是正常的,ruby gems 也一样吧。

    而且关于 module 机制这个,npm 要比 bundler 做的要好吧。

    node 的确有些缺点,es6出来了之后 node的威力会越来越大。
    robertlyc
        46
    robertlyc  
       2014-07-28 20:54:32 +08:00
    连TJ这样的人都离开node社区了 还越来越好 呵呵
    nine
        47
    nine  
       2014-07-28 21:13:33 +08:00
    @TangMonk npm机制好与不好,仁者见仁智者见智吧。
    但是node库的质量不高是铁的事实。
    yxzblue
        48
    yxzblue  
       2014-08-10 15:29:57 +08:00
    @anewg 哈哈,不错。
    xuwenmang
        49
    xuwenmang  
       2014-08-18 20:46:09 +08:00
    @nine

    不是单是语言好坏,主要在于社区气质,只有ruby社区是最有追求极致的气质,果断皈依。
    ——————————————————————————————————————————————

    这在古代来说,你就是迂腐的文人。你老板肯定是浙江人。所以你老板是老板,你在给他干活。。
    nine
        50
    nine  
       2014-08-19 02:28:17 +08:00
    @xuwenmang 呵呵

    我就是文科生,先前做运营的,后来发现开发人员非常不给力,想做东西还是得自己上,所以运维、开发都自己搞。
    php搞了5年,还是换了,真的是评估过各种语言和框架,python 、 node 、go 都玩过,最终发现还是ruby on rails 最适合。我不是拘泥于形式的人,也不是靠开发吃饭的人,不然5年php经验、写过框架还是挺值钱的。

    而且现在重新运营了,因为ruby能完全满足我“快速开发”的需求了(php真心不行),思维又从洁癖的开发人员转换成“quick and dirty”这种运营提倡的思维了。

    如果我说我是rubyist,ruby社区也许会以我为耻的吧 [阴险]
    xdazz
        51
    xdazz  
       2014-08-21 11:29:52 +08:00
    代码美不美主要取决于程序员,而不是语言。
    jinzhe
        52
    jinzhe  
       2014-09-30 14:09:47 +08:00
    我管你觉得啥好呢!需求决定一切!
    是要不是大型网站就可以用PHP!如果有高并发之类的选择golang混编就行了!没必要纠结
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5485 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 08:26 · PVG 16:26 · LAX 01:26 · JFK 04:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.