PHP到底有多糟糕?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
我来回答这个问题是告诉各位开发者:你们根本不会用PHP 这是个非常有趣的问题无论是提问者还是回答者,无论是支持者还是反对者,都没有聊技术上的事,都只是观念的碰撞. 这很好理解,因为PHP已经流行了那么多年了,技术上没有那么多糟糕的地方,本质上还是开发人员观念的问题,这是一个我们必须要承认的事实,不同的开发人员的观念是不一样的,比如: 有的人认为代码是给人看的,他们狂热的推崇ORM, 有的人认为代码是给机器跑的,拼接的SQL比什么都快; 学院派认为一个语言需要有健壮的设计,所以狂热地推崇GO之类的语言, 实用派则认为语言的任何发展方向都要为开发人员服务,所以兼容性/实用性/稳定性处于不可撼动的地位. 激进的人总是想抛弃糟糕的,引入更酷的, 保守的人老是想着保留能用的,只引入不可或缺的. 注重长远架构设计的人会对业务做出层层分层, 需要快速实现的人做个MVC就已经谢天谢地了. 这种冲突很有意思,没什么对错,但我不是和事佬,我来回答这个问题是告诉各位开发者:你们根本不会用PHP(狗头). 当然,开个玩笑. PHP有很多打开方式,所以当我们聊PHP时,最好说清楚自己在说什么,比如:
以上三种打开方式大家可能都或多或少的了解一些: PHP-FPM最流行的代表无疑是Wordpress,还有一大堆普遍常见的开发框架和开源产品,如ThinkPHP,Laravel,各类shop. PHP-CLI也是最近流行起来的开发方式,比如Workerman/Swoole/React-PHP,能够获得更高的性能(相对PHP-FPM,主要是频繁加载等环节),类似Java和Go的部署模式,更多的网络开发能力,比如长链接/微服务,也有更安全的加载方式,比如以前的挂马方式就废了,PHP不再以动态加载的方式运行. PHP-扩展却不是一个轻松地事,复杂的Zend-API让人望而却步,每个开发者都劝自己,不要搞扩展,好好活着,没必要深入C/C++,还不如学GO了.实际上PHP的扩展也有很多开发方式,比如swoole作者的PHP-X,和我介绍过的一个项目:PHP-CPP,他们把复杂的Zend-API抽象封装,让扩展的开发就像写PHP那样简单(真的,使用PHP-CPP写扩展真的跟PHP一样简单,强烈推荐) 如何开发 PHP 扩展?PHP 扩展应该注意些什么? - PHP武器库的回答 - 知乎 https://www.zhihu.com/question/20012801/answer/2390907392 几个有趣的打开方式以上几种用法算是"官方的","标配的","兼容的"用法,就是说你在PHP-FPM可以运行的代码,在PHP-CLI也能运行,在PHP-扩展中也能调用成功. 但是这里我要介绍几个其他的打开方式,他们或许不能完全兼容原来代码的运行方式,但也为我们的一些业务提供了一些新的开发方式,满足我们一些特殊的要求. KPHPKPHP是一个PHP编译器,能够将PHP代码编译成本地二进制文件. KPHP会将PHP的代码转换成等效的C++代码,然后编译生成的C++代码并以嵌入式HTTP的方式运行.可以把它认为是PHP的"转译",因为他是把PHP的代码"翻译"成C++的代码,但最终效果来看,也算是一个PHP的"编译器". KPHP不是面向JIT的,所有的了类型都是在编译时(翻译成C++时)推断的,不存在"慢启动"阶段. 但是: KPHP并不是一个万能的项目,他不是PHP的一个分支,也不是PHP的一个扩展,它是一个全新的独立的运行PHP代码的方式,他有很多的限制,你可能没办法编译你现有的项目(比如ThinkPHP). KPHP的诸多限制:
KPHP和PHP本身有很多差异,比如在PHP中,运行时才会报错,而在KPHP中,必须修复所有错误才能运行,再比如在KPHP中所有的代码都是内联的,如果a文件需要b文件的函数,那就require引入b文件,这时其他文件不需要引入b文件也能调用到那个函数,同时KPHP不支持evel,反射,数组指针等等特性. 由于以上诸多限制,一般情况下你并不能将你现有的业务直接使用KPHP编译成二进制. 但是这并不代表他一无是处,你可以按照KPHP的规范标准去写代码,比如你系统中的某一个独立的小模块,然后把他编译成二进制文件,至少这部分系统不需要担心代码泄露的问题. 性能,你肯定想了解它的性能. 实际上对于密集的算法逻辑,比如冒泡排序,在网站给出的 测试中:
如果将冒泡排序使用跟多的数组函数进行优化,
在小编看来,KPHP的性能确实不错,不过小编认为KPHP更棒的地方在于能够将PHP代码编译成二进制文件,这样我们在分发系统(产品)的时候,完全可以把最核心的技术和功能编译成二进制,避免代码泄露. peachpie另一个有趣的项目是peachpie,它能将PHP便以为.NET,这样就能获得.NET的能力,比如跨平台,二进制. 它的目标如下:
与之前介绍的KPHP而言,peachpie的目标和定位是为PHP提供一个新的运行平台,并且应当完全利用和兼容PHP的全部生态,这当然是美好的愿望. 但实际上,peachpie也并没有实现百分之百的PHP的特性,不过也完成了大部分: 更完整的函数表可以参考他的官网. 在小编看来,peachpie也为我们提供了一个新的分发方式,我们可以将一些简单地核心的最有价值的一部分功能使用peachpie来分发,完全可以做到保护代码的效果. PHP-JS这是一个很有趣的项目,他能够使用PHP来运行JS的代码,是的,可以在PHP中运行JS的代码,就好像用PHP做了一个Node一样,当然并没有Node那样的生态. 他可以在PHP中运行JS,并且和JS之间互通变量函数,让小编很激动的是,也可以互通资源类型和对象,比如PDO, 我们可以在PHP中实例化一个PDO资源,然后传递到JS代码当中:
当然小编多次尝试安装PHP-JS,但是他是一个C++扩展,遇到了很多新手问题,以后有机会会继续研究. PHP-CPP这个项目在前面已经简单介绍了一下,可以通过那个链接详细查看,这里小编还是想推荐一下它. 简单来说,就是使用C++来为PHP编写扩展,并且可以做到一个扩展只在一个站点加载. 面对PHP的扩展,每个人都会告诉你,ZendAPI是复杂的,混乱的,你驯服不了他,别浪费时间了. 实际上是这样的,但是PHP-CPP将ZendAPI封装起来,并且提供了完善的文档和注释,使得使用C++开发扩展变得非常容易和优雅,写起来甚至和PHP代码一样简单. 并且我们都知道,使用扩展来开发具体业务会有几个问题,
实际上PHP-CPP完美的解决了这些问题,基本做法是,不要使用PHP原生的方式加载扩展,而是先用PHP-CPP做一个加载扩展的功能,使用C++的能力,来做动态加载,并且可以让你的扩展存储在任意位置,随意分发,同时也可以让加载的扩展只对指定站点生效,不存在安全问题. 结论小编在开头说大家不会PHP,其实只是一句玩笑,但是对于国内大多数的开发展而言,包括PHP和其他的开发者,都有一个错误的概念:PHP=PHP-FPM。 就是说所有人都认为PHP-FPM就是PHP,只能做HTTP。 实际上并不是,小编介绍的这几个项目可能并不是主流趋势,但是PHP-CLI的开发方式已经流行起来了,比如ReactPHP在国外火了很久了,WebMan是workerman近两年推出的一个面向HTTP的一个解决方案,Swoole则被各类培训机构宣传。 所以PHP到底有多糟糕呢? 其实没那么糟糕,很多东西你不知道而已。 该文章在 2024/7/25 0:27:19 编辑过
|
相关文章
正在查询... |