PHP流行度降至历史最低,是否还值得学习?识沃科技CEO韩天峰深度解析PHP未来发展
简介|最新的TIOBE指数最近显示,PHP的受欢迎程度已下降到其历史上的最低水平,排名第17位。同时,在一年一度的堆栈溢出开发人员调查报告中,PHP在开发人员中的受欢迎程度已从前30%的收缩率上升到现在的18%。 “ PHP是世界上最好的语言”已成为一个热门模因,它带有程序员的黑色幽默。在充满不良意图的市场环境中,PHP真的不希望,不再值得学习吗?今天,我们特别邀请了Shiwo Technology的首席执行官Han Tianfeng先生,他将为我们提供对PHP当前发展状况和未来发展趋势的深入解释。作者个人资料

Swoole开源项目的创始人,PHP官方PECL开发团队的成员Shiwo Technology的首席执行官Han Tianfeng。他曾担任未来教育在线学校的首席建筑师,并在Tencent Friends Network,Taobao Search和Huya Live等互联网公司担任建筑师和技术领导者。
1。PHP从荣耀变成衰落?
众所周知,PHP语言出生于1995年,最初只是处理HTTP表格的脚本工具。对MySQL数据库查询的支持已添加到后续版本中,并逐渐成为一种独立的Web项目开发语言。随着Internet的快速发展,它受到PHP易于学习和使用以及强大的开发社区的青睐,成为了Internet应用程序开发的主要语言之一。与Linux,MySQL和Apache合并,称为LAMP Technology堆栈。 LAMP对互联网具有巨大的影响,并逐渐成为构建动态网站和应用程序的主要技术架构。根据W3C统计数据,世界网站的近78%是根据PHP开发的。建造。
值得一提的是,PHP曾经以低成本,易用性,灵活性以及可扩展性和繁荣的Web技术生态系统占据了编程开发领域的重要地位,并且与Java语言相提并论。
随着移动互联网,云计算和人工智能等新技术的兴起,互联网软件系统变得越来越复杂。大型网站系统对高并发性和可用性的要求越来越高。与PHP相比,Java具有类型的安全性,更好的性能,多线程连接池技术,更严格的编程规范,并且在服务治理中具有更成熟的解决方案和生态系统。许多技术团队更喜欢使用Java来构建Web系统而不是PHP。
此外,随着node.js和golang等新的编程语言的出现,他们具有PHP在某些方面没有的优势,例如静态汇编,更好的性能和异步编程。这些编程语言也在蓬勃发展,并且正在越来越多的开发人员使用。
尽管PHP社区也在不断努力改善语言本身,但PHP在某些领域的竞争地位逐渐被其他语言所取代。随着时代的发展,一些重要的网站和应用程序已经开始转向其他语言和框架,这导致一些人质疑PHP的未来,许多开发人员认为PHP正在下降。最新的TIOBE指数最近显示,PHP的受欢迎程度下降到第17位,这也说明了这一点,开发人员对PHP失去了信心,并转向其他编程语言。
2. PHP受欢迎程度下降的原因
外部因素是时代的变化,互联网热潮已经消失,现在是人工智能的时代。 Python现在是最受欢迎的编程语言,其他编程语言的注意力正在下降。有三个内部因素:
●PHP生态系统太单一,尚未在网络外进入新字段;
●在类型系统,编译器和并发编程方面,PHP语言不够有效,并且无法及时赶上Java,Golang和JavaScript(V8)语言和技术;
●缺乏解决历史负担的勇气仍然保留了20年前的负担,例如$ _get/$ _ post,Chaotic函数命名等大全球变量等。
但是,PHP仍然是一项很好的编程语言技术,许多网站和Web应用程序仍然使用它。 PHP社区和开发人员还在不断努力改善PHP,以适应新的技术趋势和市场需求。尽管它可能经历了一段衰落的时期,但PHP仍将在编程开发领域发挥重要作用。毫无疑问,这要归功于其强大的生态系统。
3。PHP编程语言生态系统
实际上,生态学对编程开发的重要性不容忽视,包括开发工具,图书馆,框架,社区,文档,教程,第三方服务和支持。生态系统的健康与发展直接影响开发人员的工作效率,项目的成功和技术的发展。
我认为,PHP仅在Web开发领域非常成熟,而Java在桌面软件,Android,大数据,金融系统和电子商务平台中具有成熟的生态系统。 Python广泛用于数据科学,人工智能,机器学习,科学计算,教育和其他领域。尤其是随着AI时代的出现,Python目前已成为最热门的技术。 Golang云原生和基本服务器端软件替换了C/C ++。 Node.js在前端,单页应用程序(SPA)和全堆栈开发方面具有优势。
相反,PHP生态系统非常单一,这也使PHP的局限性尤为明显。似乎官方的PHP团队对Web开发以外的生态支持并不是很感兴趣,并且主要版本更新仍在围绕Web服务器(例如PHP-FPM/APACHE)进行旋转。
幸运的是,PHP社区具有类似于Golang的类似于Golang的Swoole式异步Coroutine解决方案,该解决方案弥补了PHP在异步并发编程和网络通信中的某些缺点。 Swoole的引入还为开发人员提供了更多的选择和灵活性,从而使他们可以更好地应对复杂的应用程序方案和高度并发需求。此外,在软件开发过程中,良好的工程规范也是确保项目质量和发展效率的另一个关键因素。
4。工程规范更重要
凭借在项目研发方面的越来越多的经验,我深刻意识到工程规范比开发速度更重要。良好的工程规格可以确保项目的长期维护,可扩展性和稳定性。尽管对快速发展的追求可能会在短期内带来一些优势,但从长远来看,缺乏规格的项目可能会面临许多问题,包括不限于以下问题:
●降低代码质量:没有规格的代码通常会变得混乱,难以理解和维护,导致团队成员花费更多的时间和精力来开发,调试和修改代码;
●团队合作困难:缺乏标准化项目通常意味着每个开发人员都有自己的编码风格和习惯,这可能会导致团队合作的不一致和沟通困难;
●代码可读性差:标准化代码更容易阅读和理解,帮助开发人员快速找到问题,了解代码逻辑并进行代码审查;
●维护成本增加:缺乏标准化代码通常会增加项目的维护成本,因为开发人员需要花费更多的时间和精力来理解和修改代码,从而增加项目的技术债务;
●项目演变困难:随着项目量表的扩展和要求的变化,没有规格的代码可能会变得越来越难以维护和扩展,即使某些代码也需要重新分配或重写。
如果我们不关注工程规范,随着项目持续时间的增加,它将造成严重的后果,甚至导致项目研发的停滞。 PHP社区有许多出色的项目,可以帮助项目改善工程规格:
●phpunit:单位测试框架;
●作曲家:软件包依赖项管理器;
●PSR:这是由社区制定的一系列PHP编码规范,涵盖自动加载,编码样式,命名规格,界面设计和其他方面;
●php-cs-fixer:自动代码格式工具;
●PHPSTAN:静态分析和检查工具;
●校长:语言版本兼容性检查工具。如果项目想升级PHP版本,则可以使用它。
●PHP-Parser:PHP AST抽象语法树解析工具,可以分析PHP语法,执行一些安全检查,漏洞扫描和编程语言转换。例如,使用它实现PHPY Project PY2PHP。
但是,从编程语言的角度来看,与Java相比,PHP在规格上具有一些自然缺陷。在早期,甚至不支持命名空间,并且面向对象的功能支持不够完整。尽管PHP7版本有很多改进,但最新的PHP仍然存在以下问题:
(i)无法实现的彻底严格类型
严格的类型使编写工程规范代码变得更容易。这基本上是开发人员之间的广泛共识。弱类型编程基本上是“开发很容易,并且重建火葬场”。
如今,PHP实际上支持大多数语法中的类型限制,例如:
1。功能参数和返回值
function fun(int $a, float $b, FunClass $c, string $d, callable $e): bool {
// code ...
}
2。对象属性
class FunClass {
public int $age;
public string $name;
public stdClass $attrs;
}
还建议在开发中启用严格的模式:
但不幸的是,PHP中最常用的数组仍然是一种黑洞:
$a1 = new FunClass;
$array = [$a1];
$a2 = $array[0];
由于PHP数组无类型,因此,如果将严格键入的变量保存到数组中,然后将它们取出,则丢失了类型。这就是为什么Facebook实施HHVM最终选择不再与PHP兼容的原因,而是成为一种新的语言,即Hack,该语言在hack语言中实现了非常严格的键入。
(ii)缺乏二元建筑支持
完整的软件开发过程包括开发,测试,施工,部署和操作。诸如Java和Golang之类的静态语言更好。软件开发测试完成并发布后,该应用程序将内置在二进制程序中,并且分发和部署将不再分发和部署。需要源代码。大多数PHP直接部署以运行源代码,这导致了一些问题:
●网络壳注入,通过上传或其他文件编写引起的攻击将一些有害代码注入系统中;
●直接在线修改PHP源代码文件,从而与实际服务器中的代码不一致;
●部署系统的困难,零散的更新,导致部署过程中各种逻辑错误;
●源代码泄漏
尽管许多开发人员现在使用Docker图像来构建和部署,但已经解决了一些问题。但是,PHP仍然存在一些缺点。古代的许多PHP开发人员认为,热门更新是PHP的优势。实际上,热门更新仅在开发和测试环境中有价值。在线部署的服务不会是热门更新,并且需要进行热门更新。核心开发人员仍然顽固地坚持热门更新。
(iii)困惑的内置功能命名
所有使用PHP语言构建的功能都在根名称空间中,例如,某些内置功能的命名规格仍然不正确,例如:
●htmlspecialchars,多个字母直接放在一起,正确的是:html_encode_special_chars
●字符串相关功能,例如strstr,substr,str_replace非常令人困惑,而数组操作相关功能则更为标准化,所有这些功能均为array_*
(iv)混乱的参数顺序
内置函数的参数顺序非常令人困惑。以数组操作函数为例,Array_search和Array_filter分别搜索数组中是否有元素。后者滤除了一些符合阵列条件的元素。
array_filter($array, $callback);
arary_search($value, $array);
由于数组本身并不总是第一个参数,因此开发人员无法记住它。每次,他都需要阅读文档,以确定参数是在前方还是后面。
5。PHP语言仍然值得学习吗?
尽管如此,我认为PHP语言值得学习。与Java,Python,C ++等主流编程语言以及流行的新编程语言(例如Node.js,Rust和Golang)相比,PHP具有无法替代的独特优势。这是一个非常方便的开发工具集,可以帮助开发人员节省大量时间。
(i)语言的简单性
首先,与大多数编程语言相比,PHP的语法不是太复杂的语法。与某些编程语言不同,某些语法确实很难理解,例如C ++移动/向前(这在C ++中相对简单,C ++甚至是语言律师的职业)。
其次,它不需要考虑诸如整数溢出,符号等等问题。
此外,它没有指针的概念,对于Java和Golang的Null指针异常,它不会遇到头痛。
同时,它在Python中没有令人眼花ant乱的语法,也没有JavaScript中的0和[],'\ t','0'的大脑燃烧问题。
总而言之,客观地说,PHP语言是一种简单而介绍性的编程语言,它相对简单,学习成本极低。
(ii)巨大的功能库
PHP语言带有庞大的功能库,并具有各种功能。这些功能库涵盖了各种各样的功能和用途,使开发人员能够更轻松地实现各种软件功能,包括字符串,阵列,日期,数学,数学,正则表达式,JSON,XML,文件操作,电子邮件,电子邮件,网络通信,数据库操作,数据库操作,密码,密码,加密,图像处理,终端和过程管理,国际化和字符编码支持等。
与其他语言相比,您需要自己编写大量代码来实现功能,或者依靠各种第三方库来实现它。 PHP可以通过内置功能直接实现。例如:
1。版本比较
要比较哪种格式xyz格式的哪个版本编号更高,您可以使用version_compare
var_dump(version_compare('1.9.2', '1.10.0'));
var_dump(version_compare('1.10.0', '1.9.20'));
2。通配符计算
var_dump(fnmatch('*.qq.com', 'qqcloud.com'));
var_dump(fnmatch('*.qq.com', 'im.qq.com'));
3。路径计算
获取文件路径字符串的目录,扩展名和文件名
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n";
还有一个更有趣的扩展库,可以在PHP中直接调用Python中的功能。因此,PHP还可以直接使用AI库(例如Pytorch和Tensorflow)来运行AI大型模型推理和训练,并调用Transformers,Paddle NLP,ModelsCope。 AI功能
4。变形金刚
$transformers = PyCore::import('transformers');
$os = PyCore::import('os');
$os->environ->__setitem__('https_proxy', getenv('https_proxy'));
$distilled_student_sentiment_classifier = $transformers->pipeline(
model: "lxyuan/distilbert-base-multilingual-cased-sentiments-student",
top_k: null,
);
$rs = $distilled_student_sentiment_classifier ("I love this movie and i would watch it again and again!");
var_dump(PyCore::scalar($rs));
5。ModelsCope
$pipeline = PyCore::import('modelscope.pipelines')->pipeline;
$Tasks = PyCore::import('modelscope.utils.constant')->Tasks;
$pipe = $pipeline($Tasks->ocr_recognition, model: 'damo/cv_convnextTiny_ocr-recognition-general_damo');
$file = '/tmp/captcha.png';
file_put_contents($file, file_get_contents($captcha_url));
echo '识别结果:' . $pipe($file)['text'][0], PHP_EOL;
6。桨NLP
$pprint = PyCore::import('pprint')->pprint;
$Taskflow = PyCore::import('paddlenlp')->Taskflow;
$schema = new PyList(['时间', '选手', '赛事名称']);
$ie = $Taskflow('information_extraction', schema: $schema);
$pprint($ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!"));
7. Gradio客户
作为Gradio客户,可以调用AI模型的能力
$gradio_client = PyCore::import('gradio_client')->Client;
$client = $gradio_client("http://192.168.1.146:8088/");
$result = $client->predict("Hello!!", api_name: "/predict");
PyCore::print($result);
强弦处理能力
在各种常用的编程语言中,PHP毫无疑问地具有最强大的字符串处理功能。除了作为编程语言外,PHP还是模板语言。您可以将PHP表达式直接嵌入模板中,该模板比VUE或React JSX模板更强大。
注意:缺点是它不能在浏览器中运行
例如,以下代码可以使用模板中的任何PHP语法,而无需任何限制:
var json = = json_encode($data) ?>;
document.write(=$line?>);
6。PHP的未来发展趋势
自PHP基金会成立以来,它每年可以收到数百万美元的捐款,并且官方PHP语言开发团队的贡献变得越来越稳定。人们认为许多编程语言问题将来可以解决。
Laravel和Symfony代表的PHP框架现在越来越成熟,逐渐缩小了与Java Spring框架的距离。 Coroutine扩展项目Swoole还于今年启动了V6.0计划,引入了用于PHP的多线程 + Coroutine并发编程解决方案。
此外,PHP社区已经出现了许多有趣的新项目,例如:
●ROADRUNNER
●本地人
●Frankenphp
●phpy
结论
简而言之,我认为,PHP语言的整体发展仍然稳定且前进,并且很可能将来再次受到流行。最后,我还将为企业和开发人员提供一些建议。
首先,对于企业PHP选择,在具有数千万甚至数亿个活跃用户的大型网络系统中,PHP Technology Stack可能会面临各种挑战和困难。使用Java或Golang可以轻松获得更好的性能和工程。标准化,高度并发性和高可用性,更成熟的服务治理解决方案。但是,大多数项目都不会具有如此大的用户幅度和复杂性,而使用PHP Technology Stack的开发团队仍然是一个相对具有成本效益的选择。研发团队可以通过减少人力资源投资来维持更快的迭代速度,这在当前增加收入和减少支出的趋势下尤其重要。
其次,对于PHP开发人员,首先,我们需要学习AI,使用Chatgpt,Github Copliot等工具来提高我们的发展效率,并了解大型模型(例如Transformers)的原理;其次,我们可以使用Docker Images和Docker Swarm容器编排工具和Docker撰写以实现本机机器的容器启动管理;第三,我们还必须掌握前端技术堆栈,例如VUE/React/Elementui,并具有开发完整堆栈的能力。最后,学习其他编程,例如C ++/Golang/Java语言技术,不仅是编程语言PHP的必要条件。