为什么php这么恶心,重复作用的api那么多? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fucktwice
V2EX    PHP

为什么php这么恶心,重复作用的api那么多?

  •  
  •   fucktwice 2013-08-21 23:56:32 +08:00 8751 次点击
    这是一个创建于 4518 天前的主题,其中的信息可能已经有所发展或是发生改变。
    61 条回复    1970-01-01 08:00:00 +08:00
    clippit
        1
    clippit  
       2013-08-22 00:07:36 +08:00   2
    发帖不举例的都是标题党
    gDD
        2
    gDD  
       2013-08-22 00:10:09 +08:00 via iPhone
    楼上说得好,这种没有例子纯吐槽的烂贴比PHP的恶心不知多少,况且我每天写也没觉得有多恶心啊!
    andy12530
        3
    andy12530  
       2013-08-22 00:46:08 +08:00
    比如说 isset和empty, requice & include ?
    看起来一样,使用起来有时还是有区别的哦。。
    saharabear
        4
    saharabear  
       2013-08-22 01:08:39 +08:00   1
    如果看起来一样,但使用起来有区别,那一定是自己没仔细看文档。比如:

    1, require和include本身区别很大,一个执行一个不执行。分别用于文件执行和模板。

    2, isset和empty用于处理变量是否设置或者设置了是否为空。

    从程序的基本概念上,这是完全不同的。
    ETiV
        5
    ETiV  
       2013-08-22 01:15:48 +08:00 via iPhone
    就知道喷喷喷喷喷
    birds7
        6
    birds7  
       2013-08-22 01:19:14 +08:00
    应该不是做技术的在评价一门语言。。。
    jybox
        7
    jybox  
       2013-08-22 01:32:41 +08:00   1
    http://php.net/manual/en/aliases.php
    实在没必要举例了

    个人感觉PHP算是流行的语言中唯一一个语法没经过精心设计的
    saharabear
        8
    saharabear  
       2013-08-22 01:45:29 +08:00
    @jybox 在API的演进过程中,也许API本身有问题,但是如果完全遵循某种方式,还是没问题的。比如完全用Symfony的模式。

    一说“唯一没有语法精心设计的”,我就想起好兄弟perl.
    vibbow
        9
    vibbow  
       2013-08-22 01:59:01 +08:00 via Android
    @saharabear 还有python, 居然会有大版本严重不向后兼容的情况。
    saharabear
        10
    saharabear  
       2013-08-22 02:15:02 +08:00
    @vibbow 嗯,我觉得python不容易也可以理解(虽然有点那啥,是吧)。我没想到的是python会多版本共生(04年开始玩python,从没想过会多版本到今天还共生)
    wwqgtxx
        11
    wwqgtxx  
       2013-08-22 06:23:17 +08:00 via Android
    @vibbow 但那也是语言进步的代价,Java向后兼容很好,导致大量过时api在语言中存留(特别是集合类库,大量老旧类库),加大了复杂度,也影响到安全性的提高
    felix021
        12
    felix021  
       2013-08-22 09:04:52 +08:00
    @jybox 因为php是一摞一摞的补丁堆起来的。。不过要说没有经过精心设计的流行语言,你也可以把bash算上。
    ruchee
        13
    ruchee  
       2013-08-22 10:34:25 +08:00
    @jybox 因为精心设计出来的语言基本都流于学术圈,压根流行不起来,工业上需要的就是能干活的东西,而且需要什么就可以加什么,在你加一点我加一点的过程中,API就混沌了
    hanf
        14
    hanf  
       2013-08-22 11:18:15 +08:00
    php?那个非正交设计的典范?开玩笑。
    blahnice
        15
    blahnice  
       2013-08-22 11:52:58 +08:00   1
    @saharabear
    『1, require和include本身区别很大,一个执行一个不执行。分别用于文件执行和模板。』

    您真敢说啊。。
    kingwkb
        16
    kingwkb  
       2013-08-22 11:59:29 +08:00   1
    @saharabear 1, require和include本身区别很大,一个执行一个不执行。分别用于文件执行和模板。

    这个真的不对

    我来说一个吧,parse_str 使用 传入参数来获取返回值,常用的函数中真独特
    saharabear
        17
    saharabear  
       2013-08-22 12:00:03 +08:00
    @blahnice 您要较真,那就看文档去,require和include区别的确很大。后面这句“用于文件执行和模板”虽然不严谨,但我要表达的意思还是当用了include的时候,更适合于把php当模板的过程,require的时候,更适合用于普通文件的“包含并执行”的概念。 并且require和include大部分情况下都比require_once和include_once要好,因为php不用到处找是不是已经require过了。这是我要表达的,如果用词不准,那是我的问题,我改。
    blahnice
        18
    blahnice  
       2013-08-22 12:01:27 +08:00
    @saharabear 你确定一个执行一个不执行?
    saharabear
        19
    saharabear  
       2013-08-22 12:03:46 +08:00
    @kingwkb 嗯嗯,我的描述有问题,我的意思还是一个出了问题会执行,一个不出问题会执行,为了习惯,所以在模板中更常用include在其他地方更多用require,require出问题不执行,include会执行(我觉得我表达能力有问题了)

    另外,parse_str的问题,你是说它必须把参数传进去然后获取返回值吗?这个的确独特,但我觉得还好。
    saharabear
        20
    saharabear  
       2013-08-22 12:05:00 +08:00
    @blahnice 我的表达可能还是有总是,一个出了错会继续执行,一个出了错不继续执行。。。如果我表达得总是不对,我最好去睡一觉,昨天到现在有点醉(喝多了),还没清醒。但我明白这个区别,一个出错还会跑下去,一个出了错不会跑下去。。。。。(error和warning)
    saharabear
        21
    saharabear  
       2013-08-22 12:05:29 +08:00
    @blahnice “我的表达可能还是有总是”,我的意思是“我的表达可能还是有问题”
    msg7086
        22
    msg7086  
       2013-08-22 12:13:44 +08:00   1
    @saharabear include和require更多的还是为了区别被引用文件的重要性吧。
    比如架构中,引入一个外部类库可能会考虑用include,而引入核心类库则会偏向于require。

    话说模板的话用模板库会好一点吧……另外丢失模板文件不是应该fatal error的嘛……

    (睡觉去吧
    saharabear
        23
    saharabear  
       2013-08-22 12:15:55 +08:00
    @msg7086 失眠很久,喝酒为了睡觉,结果还是睡不着。 模板用twig挺好用的,越用越想用。
    msg7086
        24
    msg7086  
       2013-08-22 12:20:33 +08:00
    @jybox 一个18年前设计出来的脚本语言,不能要求太多吧。

    估计作者当时也没想到会搞得这么大吧。

    既要易用性,支持内联脚本(像asp),类C语言,上手快,又要设计精良,还要有足够的向后兼容性,还要性能不差,难,很难。

    python,为了一些设计上的改进,抛弃了向后兼容性,造成版本分裂。ruby/rails,每次升级都怕break。

    至少PHP做版本升级的时候省心很多。
    saharabear
        25
    saharabear  
       2013-08-22 12:22:42 +08:00
    @msg7086 ruby/rails升级困难吗?(不懂Ruby),求教。有朋友用Rails做站,好像一出新版就跟。
    msg7086
        26
    msg7086  
       2013-08-22 12:29:40 +08:00
    @saharabear 我们这边有做企业级产品的部门对ror的升级非常谨慎。
    嘛因为全程测试驱动开发,所以多数情况下测试跑绿了一般问题不大。
    但是ruby193升200还是非常担心会出问题的。

    毕竟是政府背景的服务,挂了的话影响很大的。
    xlmo
        27
    xlmo  
       2013-08-22 12:32:09 +08:00
    为什么楼主这么恶心,提论点不列论据?
    kuochung
        28
    kuochung  
       2013-08-22 12:44:16 +08:00
    经论证啊,这个楼主明显是标题党。
    这个这个~每个语言啊都是相对比较而言。没有绝对。就B/S模式的应用来说,若追求快。谁最快?Rails部署很快吧,可是运行效率PHP还是蛮理想的。这点呢,facebook足以说明(具体实现不说)。
    你所指的这个恶心啊,我暂且就理解成是矛盾吧。恰好PHP也是矛盾的,比如它是一个很容易掌握的web编程语言,但是“精”就比较难了。
    就我本人而言,我比较厌恶的,无法逾越心里的某种“难用”“恶心”。。。等等等。。都是我对我所使用的某种技术的理解过于片面,掌握不足,没领悟其思想。这个也许就是“技术情节”吧
    kuochung
        29
    kuochung  
       2013-08-22 12:48:45 +08:00
    这个补充一句啊。每个编程语言身上多少都具有一点“时代使命的”。互联网后时代不久诞生了很多编程语言么? scala,erlang,nodejs,golang。是吧。没有那个是最好的,只有适合的。
    sgissb1
        30
    sgissb1  
       2013-08-22 12:49:41 +08:00
    @saharabear 虽然我不并不觉得恶心,但我只是认为这里命名不是很好蛋很疼。有时候会用错,尤其是我这种初学的人。
    xmbaozi
        31
    xmbaozi  
       2013-08-22 12:54:37 +08:00
    看了lz发过的帖子,就可以对这个贴 hehe 了
    wjcody
        32
    wjcody  
       2013-08-22 13:07:53 +08:00
    呵呵...
    lesswest
        33
    lesswest  
       2013-08-22 13:10:30 +08:00
    呵呵。。。不至于恶心吧
    cin
        34
    cin  
       2013-08-22 13:11:23 +08:00
    如何刷分教科书演示帖...
    itaotao
        35
    itaotao  
       2013-08-22 13:44:51 +08:00
    居然敢黑我大php,一般能问这种问题的,都是学术不精的。有人说什么精心设计,没有哪门计算机语言是精心设计的,如果可以那来个牛人精心设计一个相对完美的语言,一统天下好了,省的大家搞这么多语言。
    saharabear
        36
    saharabear  
       2013-08-22 13:53:31 +08:00
    @msg7086 感谢送出。
    blahnice
        37
    blahnice  
       2013-08-22 14:14:50 +08:00   1
    @saharabear

    我想你还是没理解。你试试看include的文件里有个语法错误,到底会不会只是warning一下,然后一直执行下去。
    你说的error和warning的区别是在查找文件进行包含的时候报错的区别,不是执行时的区别。
    这真不是表述的问题,是理解的问题。
    不能误导其他人嘛,发帖讨论技术要对自己说的话负责,有错误得承认,不能又牵扯出更多的错误。
    kennedy32
        38
    kennedy32  
       2013-08-22 14:28:49 +08:00
    @saharabear require和include只是处理失败不一样吧?都是执行的。
    kennedy32
        39
    kennedy32  
       2013-08-22 14:30:01 +08:00
    楼主如果觉得所有事情都有唯一办法解决,就应该去学python,这是python的哲学
    Hyperion
        40
    Hyperion  
       2013-08-22 14:38:26 +08:00
    表示php其实也在逐渐统一方法... 5.6去掉的一大批别名, 正则也只能使用一种风格了.

    其实, 提供了这么多方法你自己选一种不就好了吗? 记住最合适的一个办法, 其他混个脸熟再顺便实践一下, 就够了, 不至于看不懂或者不会用就得了... 这么多纠结的问题本来就是不必要的...

    但也请不要勿用和滥用一些东西, 例子一下子想不起来了...
    saharabear
        41
    saharabear  
       2013-08-22 14:52:03 +08:00
    @blahnice 嗯,是我的错。
    fucktwice
        42
    fucktwice  
    OP
       2013-08-22 15:53:25 +08:00
    @jybox 好吧,我承认这次我是标题党,不过你的意思就是我想说的.
    acpp
        43
    acpp  
       2013-08-22 16:13:57 +08:00   2
    整天瞎j8吐槽的都是一事无成的
    vibbow
        44
    vibbow  
       2013-08-22 17:50:14 +08:00
    @fucktwice 标题党必须去屎
    msg7086
        45
    msg7086  
       2013-08-22 17:53:58 +08:00   1
    @kuochung ROR架构更注重开发速度和维护成本而不是运行效率。
    在人工贵比天的欧美澳,服务器比人力便宜多了。一个苦工一个月最起码5k$吧,这点钱光托管服务器就能托个10多台了。
    全程TDD开发,统一框架结构,就算来了新人也可以很快上手,老员工走了也不怕断头烂尾,也不太怕写错代码出Bug。

    当然如果上到脸书的访问量级别又是另当别论。
    feuvan
        46
    feuvan  
       2013-08-22 18:00:40 +08:00
    风格不一致的话是历史问题,这个基本无解了。
    因为一开始就是quick and dirty的
    fucktwice
        47
    fucktwice  
    OP
       2013-08-22 18:14:37 +08:00
    @msg7086 有道理,技术也分国界,总结还是 劳动力的成本
    summic
        48
    summic  
       2013-08-22 18:52:13 +08:00
    @andy12530 require 都写不对,还是好好学习学习吧
    kuochung
        49
    kuochung  
       2013-08-22 19:02:19 +08:00
    @msg7086 这个这个~我要表达的意思呢,在“每个语言啊都是相对比较而言。没有绝对。”,我的论点。
    msg7086
        50
    msg7086  
       2013-08-22 20:00:43 +08:00
    @kuochung 我算是补充你的论点吧。各种语言都有自己的擅长之处,嗯。
    andy12530
        51
    andy12530  
       2013-08-22 20:56:54 +08:00
    @summic 嗯,被你抓到喷点了~~~
    Air_Mu
        52
    Air_Mu  
       2013-08-22 22:16:01 +08:00   1
    在楼主的努力下,PHP在V2EX的地位上升至少五个百分点。
    谢谢楼主
    kuochung
        53
    kuochung  
       2013-08-22 22:20:15 +08:00
    7sj525bL0Wy7FOx9
        54
    7sj525bL0Wy7FOx9  
       2013-08-23 03:13:02 +08:00
    你可以自己写个来代替PHP,没人逼你用...
    adqin1984
        55
    adqin1984  
       2013-08-23 10:47:57 +08:00
    其实别看那么多函数,那么多功能,常用的其实也就那几个函数,初学者学任何一门语言都不容易,找到学习的门路最重要,而最好的门路就是做实际开发,一边做,一边查阅资料。
    JeremyWei
        56
    JeremyWei  
       2013-08-23 13:22:30 +08:00
    虽说PHP不是很优雅的语言,but it works,并且它正在变得更好,它现在也有闭包和对元编程的支持。
    felix021
        57
    felix021  
       2013-08-23 13:37:36 +08:00
    @sgissb1 等你发现你已经不是初学了、但仍然很易用错的时候你就会开始觉得恶心了。
    sgissb1
        58
    sgissb1  
       2013-08-23 13:40:52 +08:00
    @felix021 对弱预言不能要求太高
    felix021
        59
    felix021  
       2013-08-23 13:43:03 +08:00
    @sgissb1 是的,所以我现在全面切到python了。
    sgissb1
        60
    sgissb1  
       2013-08-23 13:44:54 +08:00
    @felix021 python了解不多,感觉也是弱预言啊。

    现在不清楚做web哪一个比较好用。在学php,娘的用了ci,想骂人。
    dorentus
        61
    dorentus  
       2013-08-23 14:25:11 +08:00
    啥叫『弱语言』……

    Python 是强类型的,比如:

    a = 1 # 变量 a 的值是一个整数
    b = '2' # 变量 b 的值是一个字符串
    a + b # 这里会报错

    而 PHP、Javascript 这些则不然,比如 Javascript 的 1 + '2' 的计算结果似乎是字符串 '12',PHP 的 1 + '2' 的结果好像是整数 3。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3387 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 05:02 PVG 13:02 LAX 21:02 JFK 00:02
    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