上海专业做网站的公司,推广qq群的网站,网站模板版权,朝阳双桥网站建设导语 | 近期 TIOBE 最新指数显示#xff0c;PHP 的流行度降至了历史最低#xff0c;排在第 17 名#xff0c;同时#xff0c;在年度 Stack Overflow 开发者调查报告中#xff0c;PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…导语 | 近期 TIOBE 最新指数显示PHP 的流行度降至了历史最低排在第 17 名同时在年度 Stack Overflow 开发者调查报告中PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言”已成为承载程序员黑色幽默的热梗。在满是唱衰的市场环境中究竟 PHP 是否真的没有前景是否已经不值得学习了今天我们特邀了识沃科技 CEO 韩天峰老师他将为我们深入解读 PHP 的发展现状和未来发展趋势。 作者简介 韩天峰识沃科技 CEOSwoole 开源项目创始人PHP 官方 PECL 开发组成员。曾任好未来学而思网校首席架构师在腾讯朋友网、淘宝搜索、虎牙直播等互联网企业担任架构师和技术负责人。 一、PHP从辉煌到走向没落 众所周知PHP 语言诞生于 1995 年它最初只是一个处理 HTTP 表单的脚本工具。在后续的版本中增加了 MySQL 数据库查询的支持才逐渐成为一门独立的 Web 项目开发语言。随着互联网的迅猛发展因PHP易学易用和强大的开发社区而备受青睐成为了互联网应用开发的主要语言之一。与 Linux、MySQL、Apache 合并称为 LAMP 技术栈LAMP 对互联网的影响巨大逐渐成为构建动态网站和应用程序的主要技术架构据 W3C 的统计全球有接近 78% 的 Web 网站是基于 PHP 开发构建的。
值得一提的是PHP 以其低成本、易用、灵活性和可扩展、繁荣的 Web 技术生态一度在编程开发领域占据着重要的地位与 Java 语言并驾齐驱。
而随着移动互联网、云计算、人工智能等新技术的兴起互联网软件系统变得越来越复杂。大型网站系统对于高并发、可用性的要求也越来越高。Java 相比 PHP 拥有类型安全、更好的性能、多线程连接池技术、更严格的编程规范并且在服务治理方面拥有更成熟的解决方案和生态。很多技术团队更倾向于使用 Java 构建 Web 系统而非 PHP。 除此之外伴随如 Node.js、Golang 等新编程语言的出现它们在某些方面具有 PHP 不具备的优势例如静态编译、更好的性能和异步编程。这些编程语言也在蓬勃发展被越来越多的开发者使用。 虽然 PHP 社区也在不断努力改进语言本身但 PHP 在某些领域的竞争地位逐渐被其他语言所取代随着时代的发展一些重要的网站和应用开始转向其他语言和框架这导致了一些人对 PHP 的未来产生了质疑很多开发者认为 PHP 正在走向没落。近期 TIOBE 最新指数显示PHP 的流行度降至了第 17 名也说明了这一点开发者正在对 PHP 失去信心转向其他编程语言。 二、PHP流行度下降的原因 外因是时代的变化互联网的热潮已退去现在是人工智能的时代Python 现在是最流行的编程语言其他的编程语言的关注度都在下降。内因有以下 3 个
● PHP 生态过于单一没有在 Web 之外进入新的领域
● PHP 语言在类型系统、编译器、并发编程方面迭代更新力度不够没能及时赶超 Java、Golang、JavaScript(v8) 这些语言和技术
● 解决历史包袱的魄力不足至今依然保留着 20 年前的包袱例如 $_GET/$_POST 等超全局变量、混乱的函数命名等。 尽管如此PHP 仍然是一门不错的编程语言技术许多网站和 Web 应用仍然在使用它。PHP 社区和开发者们也在不断努力改进 PHP使其能够适应新的技术趋势和市场需求尽管可能会经历了一段时间的没落但 PHP 仍然会在编程开发领域中扮演着重要角色这无疑得益于其强大的生态系统。 三、PHP编程语言生态 其实生态对于编程开发的重要性是不可忽视的包括开发工具、库、框架、社区、文档、教程、第三方服务和支持等。生态系统的健康与发展直接影响着开发者的工作效率、项目的成功和技术的发展。 在我看来PHP 只在 Web 开发领域是很成熟的而 Java 在桌面软件、Android、大数据、金融系统、电商平台均有成熟的生态。Python 在数据科学、人工智能、机器学习、科学计算、教育等领域有广泛应用尤其是随着 AI 时代的到来Python 成为当下最为炙手可热的技术。Golang 云原生、基础服务器端软件方面取代了 C/C。而 Node.js 在前端、单页面应用(SPA)、全栈开发方面具备优势。 相比之下 PHP 的生态非常单一这也使得 PHP 的局限性尤为明显。而似乎 PHP 官方团队似乎对于 Web 开发之外的生态支持兴趣不大主要的版本更新也依然是围绕着 PHP-FPM/Apache 这样的 Web 服务器进行着。 不过幸好 PHP 社区有 Swoole 这样类似于 Golang 的异步协程方案从而弥补了 PHP 在异步并发编程、网络通信方面的一些不足。Swoole 的引入也为开发者提供了更多选择和灵活性使他们能够更好地应对复杂的应用场景和高并发需求。此外在软件开发过程中良好的工程规范也是保证项目质量和开发效率的又一关键要素。 四、工程规范更重要 随着项目研发的经验越来越多我深刻体会到工程规范比开发的速度更重要。良好的工程规范能够确保项目的长期可维护性、可扩展性和稳定性虽然追求快速开发可能在短期内带来一些优势但长期来看缺乏规范的项目可能会面临诸多问题包括但不限于以下这些 ● 代码质量下降没有规范的代码往往会变得混乱、难以理解和维护使得团队成员在开发、调试和修改代码时耗费更多的时间和精力
● 团队协作困难缺乏规范的项目往往意味着每个开发者都有自己的编码风格和习惯这会导致团队协作时的不一致性和沟通困难
● 代码可读性差规范的代码更易于阅读和理解有助于开发者快速定位问题、理解代码逻辑和进行代码审查
● 维护成本增加缺乏规范的代码往往会增加项目的维护成本因为开发者需要花更多的时间和精力来理解和修改代码从而增加了项目的技术债务
● 项目演进困难随着项目规模的扩大和需求的变更缺乏规范的代码可能会变得越来越难以维护和扩展甚至需要重构或重写部分代码。 若我们不重视工程规范随着项目持续时间的增加将会造成严重的后果甚至导致项目研发停滞。而 PHP 社区有很多优秀的项目可以帮助项目提高工程规范 ● phpunit单元测试框架
● composer包依赖管理器
● PSR是社区制定的一系列 PHP 编码规范涵盖了自动加载、编码风格、命名规范、接口设计等方面
● php-cs-fixer代码自动格式化工具
● phpstan静态分析检查工具
● rector语言版本兼容性检查工具若项目要升级 PHP 版本可以使用它。
● php-parserPHP AST 抽象语法树解析工具可以分析 PHP 语法做些安全检查、漏洞扫描、编程语言转换例如 phpy 项目 py2php 就是用它实现的。 不过从编程语言的角度上PHP 相比 Java 在规范上存在一些天然的缺陷早期甚至连 namespace 都不支持面向对象的特性支持也不够完整。虽然在 PHP7 版本做了大量改进但最新的 PHP 依然存在以下的问题 一无法实现彻底的严格类型 严格类型更容易写出工程规范的代码。这一点基本上是开发者之间的广泛共识。弱类型编程基本上就是 “开发一时爽重构火葬场”。 现在的 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
declare(strict_types1);
但遗憾的是在 PHP 最常用的数组依然是一个类型黑洞 $a1 new FunClass;
$array [$a1];
$a2 $array[0]; 由于 PHP 的数组是无类型的将有严格类型的变量存入数组后再取出就出现了类型的丢失。这也是为什么 Facebook 实现的 HHVM 最终选择不再兼容 PHP而是独立为一门新的语言 Hack在 Hack 语言中实现了彻底的严格类型。 二缺少二进制构建支持 一个软件开发完整流程包括开发、测试、构建、部署运行Java 和 Golang 这样的静态语言是比较好的软件开发测试完成发布版本后应用程序将构建为一份二进制程序分发和部署不再需要源码。而 PHP 大部分是直接部署源码运行的就导致出现了一些列问题
● WebShell 注入通过上传或其他文件写入的攻击行为将部分有害代码注入系统中
● 直接在线上修改 PHP 源代码文件导致了实际服务器上的代码与 Git 仓库中的代码不一致
● 部署系统的难题碎片式更新导致了部署期间出现各种逻辑错误
● 源代码泄露 虽然现在很多开发者使用 Docker 镜像构建和部署解决了一些问题。但PHP 依然存在一些不足很多上古时期的 PHP 开发者认为热更新是 PHP 的优势实际上热更新只在开发测试环境中有价值线上部署运行的服务是不会热更新的而且 PHP 的核心开发者们依然顽固地坚持着热更新这个特性。 三混乱的内置函数命名 PHP 语言内置的函数全部是在根命名空间内的并且部分内置函数的命名规范还是错误的例如 ● htmlspecialchars多个字母直接拼在一起正确的应该是html_encode_special_chars
● strstr, substr, str_replace 等字符串相关函数命名相当混乱而数组操作相关函数的命名就规范多了均是 array_* 这样命名 四混乱的参数顺序 内置函数的参数顺序非常混乱以数组操作函数为例array_search 和 array_filter分别是搜索数组是否存在一个元素后者是从数组筛选出一些符合条件的元素。 array_filter($array, $callback);
arary_search($value, $array);
因为数组本身不是始终为第一个参数所以导致开发者无法记忆每次都需要去看文档以确定参数在前还是在后。 五、PHP语言还值得学习吗 尽管如此我认为 PHP 语言还是值得学习的相比现在主流的编程语言 Java、Python、C以及流行的 Node.js、Rust、Golang 等新型编程语言PHP 有其无法被取代的独特优势是一个非常便捷的开发工具集可以帮助开发者节约很多时间。 一语言的简单性 首先PHP 相较于大多数编程语言来说没有太复杂的语法不像某些编程语言有些语法实在难以理解比如 C 的 move/forward这在 C 中还算是比较简单的C 甚至有语言律师这个职业。 其次它不需要考虑整型溢出、符号之类的问题C 或 Golang 中的 int8/int16/int32/int64/uint8/uint16/uint32/uint64。 再者它没有指针的概念也不会遇到 Java 和 Golang 的空指针异常这类开发者头痛的问题。 同时它也没有 Python 中各种眼花缭乱的语法或 JavaScript 中 0 和 []、\t、0 三位一体的烧脑问题。 综上客观来说 PHP 语言就是一种朴实无华入门友好的编程语言加上它比较简单学习的成本极低。 二庞大的函数库 PHP 语言自带一个庞大的函数库各种功能应有尽有。这些函数库涵盖了各种各样的功能和用途让开发者能够更轻松地实现各种软件功能包括字符串、数组、日期、数学、正则表达式、JSON、XML、文件操作、邮件、网络通信、数据库操作、密码、加密、图像处理、终端和进程管理、国际化与字符编码支持等等。
相比其他语言需要自己编写很多代码去实现一个功能或者依赖各种第三方库实现PHP 就直接可以用内置函数实现。例如 1、版本比较 要比较两个格式为x.y.z的版本号哪个更高可以使用 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 也可以直接使用 PyTorch、TensorFlow 等 AI 库运行 AI 大模型推理、训练调用 transformers、Paddle NLP、modelscope 的 AI 能力 https://github.com/swoole/phpy 4、transformers $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、paddle 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 client 作为 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) ?;?php foreach($lines as $line): ?document.write(?$line?);
?php endforeach; ?
六、PHP的未来发展趋势 自从 PHP 基金会成立后它每年可以收到上百万美金的捐助PHP 语言官方开发团队的贡献也越来越稳定。很多编程语言的问题相信可以在未来都能得以解决。 以 Laravel、Symfony 为代表的 PHP 框架现在也越来越成熟逐渐拉近了与 Java Spring 框架的距离。而协程扩展项目 Swoole 在今年也推出了 v6.0 的计划为 PHP 引入了多线程协程的并发编程方案。 除此之外PHP 社区中还诞生了很多有趣的新项目例如 ● RoadRunner
● nativephp
● frankenphp
● phpy 结语 总而言之在我看来PHP 语言整体发展仍是稳中向前在未来重新流行起来也是极有可能的。最后我也分别给企业和开发者们一些可供参考的建议。
首先对于企业选型 PHP 来说在数千万甚至上亿用户活跃的大型 Web 系统中PHP 技术栈可能会面临各种挑战和难题使用 Java 或 Golang 可以容易获得更好的性能、工程规范、高并发和高可用性、更成熟的服务治理方案。但绝大部分项目不会有如此大规模的用户量级和复杂度使用 PHP 技术栈的开发团队依然是比较有性价比的选择。研发团队可以以较少的人力资源投入保持更快的迭代速度在当下开源节流的大趋势下尤为重要。
其次对于 PHP 开发者们而言第一我们要学习 AI使用 ChatGPT、Github Copliot 等工具提升自己的开发效率了解 Transformers 等大模型的原理第二我们可以使用 Docker 镜像和 Docker Swarm 容器编排工具、Docker Compose 实现本机的容器启动管理第三我们也要掌握 Vue/React/ElementUI 等前端技术栈要具备全栈开发的能力最后学习 C/Golang/Java 等其他编程语言技术不仅仅局限于 PHP 一种编程语言也是十分必要的。