我为什么不看好 PHP ?

左华栋 发布于 2018/08/29 17:40
阅读 11K+
收藏 3

讲道理来说对 php 还是蛮有感情的,从第一次看到 HHVM,swoole , PHP7,再到后来 laravel reactphp php-pm 等项目,php 社区有着源源不断的潜力,和一群热爱开发的人来给它续命。

糟心的设计

  • 性能问题

    PHP 设计之初是没有过多考虑性能问题,同步阻塞模型非常适合一般思维,多进程也一定解决了脚本语言长时间跑会不稳定的问题。但是这样做的后果就是多进程十分占用 CPU 资源,进程需要等数据库操作。而且 PHP 本身不常驻内存,像 laravel 这样重量级框架,每次请求需要从磁盘加载代码到内存,再执行,响应速度可想而知。 这就好比你开了一家饭馆,厨师炒菜慢,为了简化管理,你选择增加 100 个服务员,给顾客 1 对 1 服务。而异步非阻塞模型,一个服务员通过排号点餐叫号,就实现了你上万个服务员要做的事情。

  • 环境安装问题

    不得不吐槽,phpize + perl + composer 三连是 php 的一大败笔,当我们安装一个拓展时,最麻烦的情况是系统安装对应软件,phpize 编译,然后添加到 php.ini ,重启 php。而对于 golang/Rust/Node.js/Python,比如 node.js 你只需要 npm install 就能安装好所有,甚至包含了拓展和各种包,它会自动编译。所以,对于很多 php 开发者来说,拓展等环境要求耗费了很多无用功。 你可能会说,我用 phpstudy , laradock … 但是 Python golang node.js 这种,一个 apt install xxx ( yum install xxx )就解决了。 你可能会说,php 也可以用 apt 安装,但是对不起,你还需要安装它的七大姨八大姑,php-xm,php-json,php-xxxx 等十几个软件包。

生态方面

  • 大司用的 php 并不是你用的 php

    事实上,用 php 的大公司不算多,Facebook 总的来说,我更愿意称他在用 PHP 的风格生成 C++ 代码。微博更是有着无数 C 拓展,yaf 本身也是一个 C 拓展,其他一众公司基本上是 CI 这类框架为主,做视图层渲染,并且大都常驻内存。 真正能用到正宗 PHP 的基本上是没有。

  • 软件生态

    整体来说,php 生态还算不错,Laravel 生态也值得一提。 相对来说,一些新兴的 swoole 框架就没那么火了。PHP7 发布有许多年了,虽然支持类型定义,但是大部分 PHP 仓库都没有支持,相比之下,JavaScript 的生态对 Typescript 的支持要火热很多,大部分仓库都支持。

  • 开发人员问题

    PHP 目前的开发生态是一个恶性循环,入门级开发者偏多,导致 PHP 开发组不敢做太大的变动,基于 php-cli 的框架的寥寥无几,使用 PHP7 的开发者不算很多,那类型定义就更无从谈起了。对于新鲜事物的接受程度如此。

  • 企业生态

    不得不说的一个问题是,如果你学 PHP,而且对 C 和 swoole 不懂的话,那么你有很大的可能会入职外包公司。而 swoole 这些对于一般公司来说,招人成本太高,还不如直接 golang node.js 划算。

    未来的前景

  • 开发效率将不再是优势

    laravel 的火热,决定了 PHP 未来势必走上复杂化这条路,越来越复杂,越来越适合写大项目,但本身性能和设计问题限制了它。而 spring boot 等一众其他语言框架,将会越来越简单,像 node.js 你只需要 npm install , npm start 就能启动项目,不需要管拓展,不需要配置 nginx 配置伪静态等等…

  • 语言本身的限制太多

    PHP 本身提供了极为匮乏的系统层函数,你无法简单的操作和管理内存,做定时任务,做队列,做开启一个 websocket 端口,甚至处理串口通信,等等,将来这些操作将极为普遍,而 php-fpm 本身搞这些很麻烦。你只能通过拓展,通过 C 和 C++。

  • 应用场景

    PHP 除了它所宣称的开发快,本身没有什么特色,不论是性能(相对于 JS 和 JAVA ),甚至没有 JIT,当然,更不适合做 IO 密集型应用,或者像 JS 在浏览器,JAVA 在企业级应用,.NET 在 windows,有着很强的门槛或者语言特色。 可预见的事实是,不管未来 微服务,区块链,AI,VR,AR 还是会出来 BR CR DR … 都不会有 PHP 一席之地。这是一个很残酷的事实,而 PHP 如果做出重大改变,就意味着失去原来的生态和开发者。

总结

我无心挑起语言之争,只是想告诉很多 PHPer  : 

1. 你们可能在今后中遇到的很多问题,在其他语言中都十分好解决。比如操作 excel 文件 容易内存泄露,比如 做 websocket,比如做定时任务。
2. 语言是死的,人是活的,不管 C++ 也好,java 也罢,有很多值得程序员学习的东西,对个人是提高。
3. 对于 PHP 初学者来说,如果你十分讨厌外包的话,我建议你慎重考虑下,要不要继续学习 PHP。
4. 鸟哥和韩大 不推崇 laravel 的原因也是因为它本身太庞大,不适合 php-fpm。 并且从架构角度来说,CI 框架更好优化,把 IO 操作让给更适合的程序或者语言。 

总的来说,PHP 现有的项目一大堆,做快速开发还是可以,并且还有很多历史遗留的项目,在很长时间内不会死,甚至活得很好,你也不用担心事业,但从长远来看它并没有前途。

以下是话题补充:

@左华栋:相关主流语言趋势参考: https://insights.stackoverflow.com/trends?tags=php%2Cpython%2Cjavascript%2Cnode.js%2Ctypescript%2Cgo 以及 github 的报告: https://juejin.im/entry/5bf235d8e51d4552ee4242a5 (2018/11/20 23:07)
加载中
4
懒神
懒神

各有各自的用处。就像有人家里只有5平米的空地要种种粮食,这时候选择大型播种机就异常浪费了。

2
Minho
Minho

很认同。虽然我也是PHPer,但是感觉PHP的应用场景太窄了。与其用swoole还不如用golang呢。毕竟swoole也有学习成本,因为PHP门槛低,不是所有PHPer都懂并发,线程,内存,异步io这些东西的。

t
type-moon
回复 @Minho : 瓜娃子你继续骂你爹我,我还要赚钱养你妈和你这个小畜牲,不奉陪了。
Minho
Minho
回复 @type-moon : 操你妈逼的,自己找骂。操死你祖宗十八代
t
type-moon
回复 @Minho : 呵呵,确实呀,跟你妈妈生了你个瓜娃子,不傻逼怎么草你妈生了你个小崽子呢?
Minho
Minho
回复 @type-moon : 又来个傻逼。
t
type-moon
学个语言还学出优越感了,真心2到家了。老板要你写啥,你敢不写啥?不写,只有滚蛋。华为都35岁劝退,还有码农在这纠结语言高下。多长点脑子,替老板和自己多赚点钱,别被淘汰了。
下一页
2
Koma
Koma

1, 如果用 swoole,不如用 Java。

2, composer 跟安装扩展没啥关系,php的扩展依然是 phpize,perl 早挂了, composer 就是个依赖包管理器。

3, php debug 是个麻烦事儿

4, phper 线程,进程,异步I/O 这些基础确实不好(大部分),但是 javaer 的前端和服务器知识大部分不如 phper,各有利弊

5, 还有啥?

Minho
Minho
回复 @邪小白 : PHP适合新手写,但是不合适有追求的人写。写了几年PHP后会自我感觉良好,看其他语言都是垃圾,这是PHP圈的现状,看看评论就知道,PHPer是什么德性了。
邪小白
邪小白
回复 @Minho : 个人感触蛮深的,如果想要好好用php,确实得学各种服务器的配置,编译,扩展的安装。简单来说,光一个编译php的活,就得难道不少人,别说,定制化php的各种插件和版本了。当然了,java如果也想好好用,理论也是要不少。最终个人的感觉是,php真的不适合新手写啊。
Minho
Minho
第四条是评价一个程序员的上限。
2
带头哥哥2018
带头哥哥2018

年年有傻|逼,今年特别多:

1.我为什么不看好php:  https://www.oschina.net/question/2352515_2286026

2.我为什么不看好node.js:  https://www.oschina.net/question/2827956_2286064

3.我为什么放弃了python,选择了Go:  https://blog.csdn.net/csdnnews/article/details/78293757

3.我为什么放弃了Go语言: https://www.cnblogs.com/mengfanrong/p/3819050.html

=================傻|逼分界线====================

马斯克:常人不懂马斯克,“我不知道什么叫放弃,除非我死去”

http://tech.ifeng.com/a/20171225/44819660_0.shtml

定期马甲
定期马甲
截止目前骂rust文章较少 学了两月,难。不过写出一小段很开心。
带头哥哥2018
带头哥哥2018
回复 @左华栋 : 我不只是phper,我是多种语言开发者。 我列举了5条,你自己看看吧。你们大神都很牛逼。 第一位大神不看好php 第二位大神不看好node.js 第三位大神放弃了python,选择了GO 第四位大神放弃了GO =================== 你们大神的世界我不懂,你不要回复了,你说什么我听不懂!
左华栋
左华栋
就事论事,人身攻击 是 phper 专属的么? 你问我为啥不看好,就这素质的人,生态能怎么样
2
_Miracle丶贤
_Miracle丶贤

作为一个phper、我都学会了 py、最近在学 golang。

发现golang确实 U秀。考虑转 golang

1
redwencheng
redwencheng

跟技术选型有关吧,大公司技术团队人数多,系统性能要求也大,成熟的java会是更合适的选择。php适合中小型公司,也适合创业公司或者做企业内部用系统,当然php也在进化,机器的性能也在飞速的提高,若以后量子计算机实现,所有的语言性能都不会是障碍。

redwencheng
redwencheng
回复 @hgoldfish : 我不懂没关系,希望你是真懂
h
hgoldfish
量子计算机是另外一种算法。不能代表传统计算机。你觉得量子计算机一出,语言性能不再是问题。说明你对量子计算机完全不懂。
1
小熊猫丶
小熊猫丶

这是砖家吧

1
y
yozoco

用php是因为简单,http本来就是一个处理请求数据的过程,和桌面程序还是不一样,但是为什么那么多人都喜欢用什么框架,搞得和java一样复杂,为什么不去直接用java,php的优势就是内置大量的现成函数,处理一个请求只要写一个函数,规划好函数和文件,就好了,非要扯上一堆的class不理解,吧oo搞得教条一样。好像函数编程不是程序一样,不管函数还是类,无非不就是一个代码公用和代码模块的管理的问题,语法上最求复杂肯定不是语言的方向,

php是为了快速解决问题的,golang是个不错的东西,但是编码还是没有php来的方便,比如json处理,线上如果有更新,势必服务要重启,不像php文件替换就可以

sklinux
sklinux
回复 @左华栋 : php就是安全问题比较头痛:joy:
Minho
Minho
热重启,了解下。
左华栋
左华栋
恩,比较中肯了。 但是就目前而言 php 最火的 框架是 laravel TP YII 等。 最火的程序 WordPress 。 大部分程序员是这
1
y
yozoco

php最大的问题是命名规则,没有个一个统一规则,就像一个拼凑出来的,其他的都不是什么大问题,php肯定是有存在的场景的

左华栋
左华栋
回复 @开源春哥 : 恩,现在是基于 node.js, 开发者只需要 无脑 npm install 即可装好拓展和包
开源春哥
开源春哥
你有没有考虑过是你的框架兼容性的问题?你以为搞其他语言的就啥都会?我们的群里面有大量搞其他语言的,连smtp的端口,http的端口都搞不定。mysql的端口都搞不定,这些和语言有关系吗?
左华栋
左华栋
当然这里说的是生态问题,语言问题其实不大。
左华栋
左华栋
我们之前开源了 Notadd (PHP) 用了特殊拓展,然后很多人都不会装.... 水平是会限制 php 未来发展的
1
fancanjie
fancanjie

php成立之初就是个人网页工具包,你想用它来搞飞机肯定是不行的!

返回顶部
顶部