PHP相比其它主流的编程语言有啥缺点

说一点儿我的看法吧。看到大家上面说的大多集中到两点:性能和和函数命名规范。其实我到不认为这些问题有多严重,我们首先说性能,且不说php7让性能翻了一倍而且在可见的将来php7.1更是加入了jit随之而来性能也会有更大程度上的提升。就说目前的php5.x其实你真正被性能困扰的时候很少。一般来说不管是网站或者做app的服务器端大多数工作都是一些缓存和数据库处理。这样一个场景下不管你用什么语言其实结果相差并不大。不相信的话你可以用php-fpm和servlet做同样的业务看看他们的差别。至于一些需要需要密集运算的任务比如压缩、图形等这些PHP通常是用扩展实现的。之前我用php和c++分别做了一版图像处理程序。功能大致相同,也都是调用imagemagick来实现的。发现性能上几乎没什么差别。而开发程序PHP却容易了许多。由此可见性能在PHP的缺陷中并不致命。python、ruby很多场景下比PHP性能更差人家不也有那么多人在用吗?至于函数命名规范我觉得就更没什么了,它规不规范我们不也用了这么多年了吗?没发现带来太大的困扰我这里提几点在我看来的缺陷1、多线程支持。线程的重要性不需要我多说什么。你能想象没有线程支持的JAVA和C#吗?但是PHP长久以来确实是一个这样的状态。或许有人会说:你真是孤陋寡闻,人家php的pthreads扩展早就有了。是的,这个是我对php最关注的特性,怎么会不留意呢。但是你发现有多少人的项目真的用了呢?为什么不用呢?主要是应为它不够稳定,之前我在项目中第一时间用了这个神奇东东,可是很快就发现程序总是在我知道的时候莫名其妙的自己挂掉。后来多方了解才发现出现问题的原因其实不在于PHP本身,而是因为一直以来php就是个单进程的程序,它的扩展虽然有线程安全和非安全的版本但是很多都或多或少存在着线程安全的问题。php的扩展都是C写的,这也就意味着任何一个扩展出现线程竞争资源控制问题都能让整个挂掉。以至于 @韩天峰的swoole开始是多线程多进程模式都支持的可后来他也说多线程模式很不稳定,如果要完好的支持的话需要对PHP核心动大手术,让核心支持多线程而不仅仅是一个扩展能做好的。现在的硬件设备基本上都是动辄几十个核,单线程程序对多核时代的资源利用太有限了(当然PHP-FPM是多进程的不存在这个问题)。PHP有pcntl_xxx一系列用于多进程的编程的方法。但是一则这些方法有在实际使用过程中会遇到很多问题,二则多进程程序的通讯是非常费劲的事情,比如你用多进程程序设计一个多人聊天室。2、核心异步网络支持(当然在linux只有同步非阻塞网络模型)。却少了这个使得很难开发一个能够承受大并发的网络应用。传统的网络模型和io都阻塞的。这样基本的编程的做法就是一个进程(或者线程)响应一个用户链接请求。因此无法完成像实时网游那样需要成千上万网络连接的任务。尽管php也有Libevent、eio扩展对此算是某种程度上面的弥补,但是感觉都不是那么完善先写两点。看看能不能想出些别的在加上
■网友
你要说缺点的话…就是php只是个脚本语言,要一边执行,一边编译,其他我想不出来。
■网友
【PHP相比其它主流的编程语言有啥缺点】 PHP开发周期短 老板看不到你的努力

■网友
上手太快,起点太低,开源车轮子太多
■网友
楼上几位都说对比起来性能差,实际上是受许多年前网上的一些性能评测影响,主要是01年那时跟jsp的一个对比。那时所谓,"边解释边执行"是php 3不过那真是一个长久的误解,到了02年的php 4开始,就已经是是编译型语言了,到了后面05年开始的php5,尤其是5.3,性能比java就已经差不多了,同样配置的服务器上,由于java平台比较沉重,所以单机来说php更是比java负载能力要高,这是大型网站的运维体会。说到缺点,有两个,1自由,要么太过松散,容易导致无法维护,要么太过于追求工程化,使得复杂度开始变得很高。2只能响应web,不好做长时间运行的东东。


推荐阅读