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

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

  •  
  •   fucktwice · 2013-08-21 23:56:32 +08:00 · 7859 次点击
    这是一个创建于 3890 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    LionXen
        54
    LionXen  
       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   ·   我们的愿景   ·   实用小工具   ·   3628 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:51 · PVG 12:51 · LAX 21:51 · JFK 00:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.