谈谈我对php优点和缺点的认识

目前这小半年都在用php做一些爬虫类的活儿,回想起来php强大的web内容处理让我工作的很高效,可以在目前业界没有通用方案可以参考的前提下很快摸索出合适的方案。我也对php的一些优缺点有了进一步的看法,这些观点我可能在别的社区阐述过,这里就稍微整理一下加深我对php的理解。

缺点:
1、php 最大的缺点就是没有连接池,因为不是常驻内存。虽然可以选择第三方的连接池(一般来说这些连接池也兼有读写分离的功能),不过应用级别的连接池真的很方便,也可以拿来做缓存,当然了php有基于共享内存的缓存方案比如:apc(最新的是apcu了)和yac(无锁高速缓存,但是数据可能破坏)可以一定程度缓解这个问题,Swoole、ReactPHP等异步常驻内存方案抛弃了php易于部署的特性而且不太成熟也很难采用。

2、异常和 warning/error混在一起,就算php7也没有完全解决这个问题。框架为了解决这个问题可能会去设置error_handler或者shutdown_handler之类的来做自己的异常抛出处理,我写的最大4k行级别的代码大量使用异常机制倒是没遇到坑,但是果然还是希望能把所有的warning/error抛出成异常。

3、运行时还不够强大,包括垃圾回收和没有jit,很多时候需要靠重启进程来解决垃圾回收问题,当然了脚本语言有jit的不多。而php的第二次jit尝试提高也很少。

4、社区对Laravel这种过度设计+速度慢,连单步调试都做不到的框架(谁能用xdebug能跳进那些充满闭包回调的总线/命令呢)的追捧。

5、一些扩展只支持linux,比如pcntl、swoole,这就导致了习惯win下开发的我很难采用这些扩展。

6、扩展对多线程支持的不稳定,导致不敢用多线程。

优点:
1 、 php 最优秀的特质是兼容性。不管是 php 语言自身还是第三方库,非常注重兼容性……我个人对兼容性非常看重,因为洁癖去 break BC 是一件非常愚蠢的事,这也是 python 最大的缺点, py3 选择不兼容 py2 真的非常愚蠢。比如我用 mongo ,我发现 db.dropUser()在大版本里代替了 db.removeUser(),但是我并没有看到 removeUser 有什么大的缺陷,你知道我如果升级了 mongo 版本就要为了开发者的那点洁癖付出代价。 php 标准库一大堆初创期的命名有问题的函数,但是有时候这些函数真的很好用。 php 兼容性堪比巨硬的兼容性精神。

2 、语法很朴素不搞标新立异的东西,该有的东西基本都有。 php 最独特的东西莫过于变量前面加$了,除此以外语言本身就和 c/c++、 java 语言非常相似,我认为这也是很多人觉得 php 就是好用的原因之一(当然最大的原因应该是好用的数组和部署简单)。没错这里还是要把 py 拿出来批判一番, py 的缩进看似 cool ,但是用久了你一定会发现代码写大了缩进很夸张,而且你没法用 IDE 来格式化 py 代码,因为 py 的缩进包含了代码逻辑。 php 的面相对象该有的也有,但是 py 的 class 连 public/private/protected 都没有反射也没有,至少我很多时候写 php 和写 java 感觉差不多。现在一些新的语言老是喜欢搞一些标新立异的语法出来(感觉不这样就不 cool 一样),但是这些语法并没有带来新的特性,然后让人感觉神烦。要不是脚本语言开发快我更愿意用 java 或者 c++。

3 、 php 在 web 领域积累了很多很棒的第三方库 /扩展 /框架(可以说是完爆别的脚本语言),注意是 web 领域,而且跨平台性还很不错。作为一个巨硬党,我就喜欢在 windows 下工作,喜欢在 IDE 下工作,喜欢 GUI ,啥 vim/emacs/subline 我觉得都不如 eclipse/vs 来单步调试好用。 git 命令行那么困难不知道你们怎么学会的,我觉得太难了下了个 sourcetree 都不用学 git ,看界面自己就会了。别的开发辅助 GUI 工具, windows 下那是要啥有啥还特好用。 php 的第三方库基于 composer 管理,我 win 下开发好直接 copy 到 linux 下就跑起来了,简单粗暴有效。

4 、再往好的方向发展,不断克服缺点。扩展和第三方库分开取得的性能 /兼容折中, composer 出现的及时,而且 php 意识到的自己缺乏什么不盲目跟风,比如 php7 能把以前只能 error 的东西抛出成异常,增加语言的强类型特性,继续提高性能 and so on 。

5、因为强大的标准库+好用的数组+优秀的web库,php搞内容处理非常非常强大,在写爬虫需要大量的内容处理的时候对此感受太深刻了。 因为要支持IIS的多线程运行php方式,php改造了内核可以选择多线程版本,而且pecl扩展都有严格区分了单线程和多线程版本,虽然稳定性欠佳但是脚本语言里论多线程支持,php做得非常漂亮。很早的支持了utf8,不用为编码操心。

评论

  1. c
    8年前
    2016-10-18 11:51:00

    你好,我想通过QQ定位到一个人,能给予点帮助吗

    • fxxkc
      8年前
      2016-12-05 13:56:29

      喷了,你试试肛门插天线没准儿能扫描到

  2. 7年前
    2017-4-10 11:10:03

    家庭伦理大剧

  3. 7年前
    2017-4-10 11:10:03

    家庭伦理大剧

  4. 7年前
    2017-4-10 11:10:03

    家庭伦理大剧

  5. 7年前
    2017-4-10 11:10:03

    家庭伦理大剧

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇