wuhaoworld
V2EX  ›  PHP

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

  •  
  •   wuhaoworld · Jul 27, 2014 · 7004 views
    This topic created in 4333 days ago, the information mentioned may be changed or developed.
    互联网时代唯快不破,同样是一个创意,php “quick and dirty” 的特点可以超快速满足需求,至于代码美不美,用户才看不到,先赢得先机赢得用户比什么都重要
    52 replies    2014-09-30 14:09:47 +08:00
    em70
        1
    em70  
       Jul 27, 2014 via Android
    谁说php代码不美,不但快,随便写的代码不用优化性能也不错。

    另外,php为web而生,其他事情干不好。其他语言,可以做web,还能做别的。
    G2bN4dbX9J3ncp0r
        2
    G2bN4dbX9J3ncp0r  
       Jul 27, 2014
    写web,rails开发效率不比php慢,你昨不用。
    tushiner
        3
    tushiner  
       Jul 27, 2014   ❤️ 6
    。。。。。不讨论语言的好坏是做好程序员的第一步。。。。。
    TangMonk
        4
    TangMonk  
       Jul 27, 2014
    @lidashuang 上手要比 php 麻烦点吧
    akfish
        5
    akfish  
       Jul 27, 2014   ❤️ 1
    语言有什么好讨论的,我基本上每个项目都会用完全不同的技术去做。
    好的开发者不应该去追求把某种语言/平台撸到出老茧,熟能生巧猴子都做得到,只要时间足够。
    迅速吸收新技术转化为生产力,才是真的快。
    越是见得少,就越喜欢停留在自己能看到的范围内自我陶醉:你看我能把xxx撸得飞快!xxx是全宇宙最好的!
    zts1993
        6
    zts1993  
       Jul 27, 2014
    瓶颈又不在语言,快才是王道。
    xuwenmang
        7
    xuwenmang  
       Jul 27, 2014   ❤️ 2
    因为有wordpress,因为有drupal,因为有joomla。
    reeco
        8
    reeco  
       Jul 27, 2014
    天下武功,唯快不破
    这是我05年看《功夫》时现在还记得的一句台词
    jsonline
        9
    jsonline  
       Jul 28, 2014 via Android
    嗯,PHP是最好的语言,我服。但我就是不写PHP
    nine
        10
    nine  
       Jul 28, 2014   ❤️ 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  
       Jul 28, 2014 via iPhone   ❤️ 1
    真的不是因为各种免费或收费的cPanel PHP空间吗……
    yakczh
        12
    yakczh  
       Jul 28, 2014
    quick and dirty
    wangdaimishu
        13
    wangdaimishu  
       Jul 28, 2014
    主要是够简单,我一个做java的朋友,拿着php手册看了半天就可以动手开始做,虽然代码写的不忍直视,但是边看边做,很快东西就出来了,然后放服务器上去跑的还很Hi,其他语言是没法做到这点的。
    wangdaimishu
        14
    wangdaimishu  
       Jul 28, 2014
    @nine Yii只是默认通过表生成model,实际上model不仅可以用来做数据库的表映射,还能用来收集表单数据,可以说任何跟数据有关的你都可以通过model来处理,功能非常强大。

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

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

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

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

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

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

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

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

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

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

    ruby/rails一档

    其他语言随意
    kisshere
        35
    kisshere  
       Jul 28, 2014 via Android   ❤️ 1
    一谈到编程语言or编辑器,phper和DWer就只能说,你们聊吧,我先走了,而这时高逼格就该大显身手了,虽然他们自己做的东西惨不忍睹
    imn1
        36
    imn1  
       Jul 28, 2014
    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  
       Jul 28, 2014 via Android
    不要去鄙视任何一种语言,他们都是人类智慧的结晶
    MarioLuisGarcia
        38
    MarioLuisGarcia  
       Jul 28, 2014
    You're not the language, and the language isn't you.
    breestealth
        39
    breestealth  
       Jul 28, 2014
    说某某语言在另一种语言面前是渣的各位,难道你们不知道基本上当前PHP、Python、Ruby、Node之类的在Java面前就是玩具么?

    讨论语言毫无意义。
    insub
        40
    insub  
       Jul 28, 2014
    @nine 部署用mina,不麻烦
    yangxiongwei
        41
    yangxiongwei  
       Jul 28, 2014
    Java的轮子应该是最多的
    nine
        42
    nine  
       Jul 28, 2014   ❤️ 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  
       Jul 28, 2014
    为翻页添砖加瓦,"PHP是最好的语言!!!"
    anewg
        44
    anewg  
       Jul 28, 2014   ❤️ 1
    Ruby 讲的是一个情怀
    TangMonk
        45
    TangMonk  
       Jul 28, 2014
    @nine

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

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

    node 的确有些缺点,es6出来了之后 node的威力会越来越大。
    robertlyc
        46
    robertlyc  
       Jul 28, 2014
    连TJ这样的人都离开node社区了 还越来越好 呵呵
    nine
        47
    nine  
       Jul 28, 2014
    @TangMonk npm机制好与不好,仁者见仁智者见智吧。
    但是node库的质量不高是铁的事实。
    yxzblue
        48
    yxzblue  
       Aug 10, 2014
    @anewg 哈哈,不错。
    xuwenmang
        49
    xuwenmang  
       Aug 18, 2014
    @nine

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

    这在古代来说,你就是迂腐的文人。你老板肯定是浙江人。所以你老板是老板,你在给他干活。。
    nine
        50
    nine  
       Aug 19, 2014
    @xuwenmang 呵呵

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

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

    如果我说我是rubyist,ruby社区也许会以我为耻的吧 [阴险]
    xdazz
        51
    xdazz  
       Aug 21, 2014
    代码美不美主要取决于程序员,而不是语言。
    jinzhe
        52
    jinzhe  
       Sep 30, 2014
    我管你觉得啥好呢!需求决定一切!
    是要不是大型网站就可以用PHP!如果有高并发之类的选择golang混编就行了!没必要纠结
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5432 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 275ms · UTC 01:26 · PVG 09:26 · LAX 18:26 · JFK 21:26
    ♥ Do have faith in what you're doing.