当前位置:首页 > PHP > 都什么年代了!PHP早已经不是那个“设计糟糕”的语言了

宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取

都什么年代了!PHP早已经不是那个“设计糟糕”的语言了

转载自:stitcher.io 2019-06-11 PHP 2537
分享给朋友:

你还记得流行的“ PHP:糟糕的设计 ”博客文章吗?我第一次读到这篇文章时,我在一个糟糕地方工作。这篇文章让我想知道我是否应该放弃并去做与编程完全不同的事情。

幸运的是,我之后很快就换了工作,更重要的是,自从PHP5. *版本开始以来,PHP改进很多。今天,我正在向那些不再使用PHP编程,或者陷入遗留项目的人们致敬。

剧透:今天有些事情仍然很糟糕,就像几乎每种编程语言都有它的怪癖一样。许多核心功能仍然有不一致的方法签名,仍然有令人困惑的配置设置,仍有许多开发人员在那里写蹩脚的代码 - 因为他们必须,或因为他们不知道更好。

今天我想看看光明的一面:让我们关注已经发生变化的事情以及编写干净和可维护的PHP代码的方法。我想请你暂时搁置任何偏见。

之后,您可以像以前一样自由地思考PHP。虽然在过去的几年里你会对PHP的一些改进感到惊讶。

  • PHP每年都会通过新版本积极开发

  • 自PHP 5时代以来的表现增加了一倍,即使不是三倍

  • 有一个非常活跃的框架,包和平台的生态系统

  • PHP在过去几年中添加了许多新功能,并且语言不断发展

  • 像静态分析仪这样的工具在过去几年中已经成熟,并且只能保持增长

更新:人们让我展示一些实际的代码。我很高兴地说这是可能的!这 是我的一个爱好项目的源代码,用PHP和Laravel编写; 而这里是几百个,我们在我们的办公室保持OSS包的列表。两者都是现代PHP项目的好例子。

开始吧。

历史总结

为了更好地衡量,让我们快速回顾一下PHP今天的发布周期。我们现在的PHP为7.3,预计在2019年底为7.4。PHP 8.0将是7.4之后的下一个版本。

自从5. *时代以来,核心团队试图保持每年的发布周期,并且在过去的四年中成功地这样做了。

一般来说,每个新版本都会在两年内得到积极支持,并再获得一年的“安全修复”。目标是激励PHP开发人员尽可能保持最新:例如,每年进行小规模升级比在5.4到7.0之间跳转更容易。

可以在此处找到PHP时间轴的活动概述。

最后,PHP 5.6是最新的5. *版本,7.0是下一个版本。如果您想知道PHP 6发生了什么,您可以收听PHP Roundtable播客

有了这个,让我们揭穿一些关于现代PHP的常见误解。

PHP的表现

早在5. *天,PHP的表现就是......平均水平。但是在7.0版本中,PHP的核心部分从头开始重写,导致性能提升两到三倍。

但言语还不够。我们来看看基准。幸运的是,其他人花了很多时间来对PHP性能进行基准测试。我发现Kinsta有一个很好的更新列表。

自7.0升级以来,性能仅提升。PHP Web应用程序与其他语言中的Web框架相比具有可比性 - 在某些情况下更好 - 性能。看看这个广泛的基准测试套件

当然PHP框架不会胜过C和Rust,但它们比Rails或Django要好得多,并且与ExpressJS相当。

框架和生态系统

说到框架:PHP不仅仅是WordPress了。让我告诉你一些专业的PHP开发人员:WordPress绝不代表当代生态系统。

一般来说,有两个主要的Web应用程序框架,以及一些较小的Web应用程序框架:SymfonyLaravel。当然还有Zend,Yii,Cake,Code Igniter等等 - 但是如果你想知道现代PHP开发的样子,你需要掌握Symfony或者Laravel其中一个

这两个框架都有一个庞大的包和产品生态系统。从管理面板和CRM到独立软件包,CI到分析器,Web套接字服务器,排队管理器,支付集成等众多服务; 老实说,列出的内容太多了。

这些框架虽然适用于实际开发。如果您需要纯粹的内容管理,WordPress和CraftCMS等平台只会越来越多地进行改进。

衡量PHP生态系统当前状态的一种方法是查看Packagist,这是PHP的主要软件包存储库。它已呈指数级增长。每天下载量达到2500万次,可以说PHP生态系统不是以前的小型弱势群体。

请查看此图表,列出一段时间内的软件包和版本数量。它也可以在Packagist网站上找到。

packagist-2075x810.png

除了应用程序框架和CMS之外,我们还看到过去几年异步框架的兴起。

这些是用PHP或其他语言编写的框架和服务器,允许用户运行真正的异步PHP。一些例子包括SwooleAmpReactPHP

由于我们已经进入了异步世界,因此Web套接字和具有大量IO的应用程序之类的东西在PHP世界中实际上已经变得相关。

内部邮件列表 - 核心开发人员讨论语言开发的地方 - 也在谈论核心添加libuv。对于那些不了解libuv的人:它是Node.js用来允许其所有异步性的同一个库。

语言本身

虽然async与await尚未推向市场,大量的改进语言本身已经取得了过去几年。这是PHP中新功能的非详尽列表:

短封闭

空结合运算符

性状

键入的属性

传播运营商

JIT编译器

FFI

匿名课程

返回类型声明

当代密码学

发电机

还有更多

当我们讨论语言功能时,我们还要谈谈当今语言的发展过程。虽然社区被允许提出RFC,但是有一个活跃的志愿者核心团队将语言推向前进。

接下来,这些RFC将在“内部”邮件列表中进行讨论,该列表也可以在线阅读。在添加新语言功能之前,必须进行投票。核心中只允许至少具有2/3多数的RFC。

可能有大约100人允许投票,但您不需要对每个RFC进行投票。核心团队的成员当然可以投票,他们必须维护代码库。除了他们之外,还有一群人从PHP社区中被单独挑选出来。这些人包括PHP文档的维护者,整个PHP项目的贡献者,以及PHP社区中的杰出开发人员。

虽然大多数核心开发是在自愿的基础上完成的,但是最近,JetBrains聘请了一位核心PHP开发人员Nikita Popov 来全职学习该语言。另一个例子是最近决定投资Zend框架的Linux基金会。像这样的雇佣和收购确保了PHP未来发展的稳定性。

工具

除了核心本身,我们看到过去几年中围绕它的工具有所增加。我想到的是静态分析仪,如Psalm,由Vimeo创建;PhanPHPStan

这些工具将静态分析您的PHP代码并报告任何类型错误,可能的错误等。在某种程度上,它们提供的功能可以与TypeScript进行比较,但是现在语言没有被转换,因此不允许使用自定义语法。

虽然这意味着我们需要依赖docblocks,但是PHP的原始创建者Rasmus Lerdorf确实提到了向核心添加静态分析引擎的想法。虽然会有很多潜力,但这是一项艰巨的任务。

说到转换,并受到JavaScript社区的启发; 已经努力在用户土地中扩展PHP语法。一个名为Pre的项目就是这样:允许新的PHP语法转换为普通的PHP代码。

虽然这个想法已经在JavaScript世界中证明了,但如果提供了适当的IDE和静态分析支持,它只能在PHP中工作。这是一个非常有趣的想法,但必须增长才能称之为“主流”。

在结束时

尽管如此,我们仍然可以将PHP视为一种糟糕的语言。虽然这种语言肯定有它的缺点和20年的遗产随之而来; 我可以放心地说,我喜欢和它一起工作。

根据我的经验,我能够创建可靠,可维护和高质量的软件。我工作的客户对最终结果感到满意,就像我一样。

尽管仍然可以用PHP做很多混乱的事情,但我认为如果使用明智和正确的话,它是Web开发的绝佳选择。


分享给朋友:

相关文章

EasyAdmin8 - PHP8.0常用框架快速后台管理系统

EasyAdmin8 开源快速开发后台,ThinKPHP 、 Laravel、webman 均覆盖

webman-blog 基于 webman 开源博客程序

webman-blog,一个基于 webman 的简单自适应个人博客程序,带后台。

webman自定义进程

1、新建文件 process/Rpc.php 编写rpc进程<?php namespace process; use Workerman\Connection\TcpConnection; class Rpc {    &n

在PHP7+下监控Memcached服务、性能、扇区等信息

PHPMemcachedAdmin:一款网页可视化的Memcached工具

Swoole的PHP协程开发框架 imi 集成ThinkPHP模板引擎 think-template

在 imi 框架根目录中执行composer require topthink/think-template安装好模板引擎后,找到路径\vendor\topthink\think-template\src\Template.php找到 fetch() 渲染模板文件的方法,将最后一

PHP7下MongoDB自增或自减一个字段的值

findAndModify属于原子操作模型数据,所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。

PHP的面向对象解析

早期编程由于受电脑硬件限制,程序都是追求效率,而忽略可理解性,扩充性,随着硬件技术的发展,编程越来越重视多人开发,程序员越来越重视程序的可靠性,可扩展性,可维护性,所以刺激了程序语言的发展

ThinkPHP6.0使用EasyTask常驻内存多进程任务管理

PHP常驻内存的多进程任务管理器Composer包。以进程管理为出发点,同时也支持为每个进程设置定时执行功能,您可以用它来完成需要重复运行的任务(如订单超时自动取消,短信邮件异步推送,队列/消费者/频道订阅者等等),甚至处理计划任务。

PHP8新特性盘点

PHP 8.0.0 已经正式发布了,这个对于PHPer无疑是一个令人振奋的消息。它包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match表达式、nullsafe运算符、JIT,并改进了类型系统、错误处理、语法一致性。

PHP8新特性系列:构造器属性提升使用及注意事项

本篇主要说下PHP8构造器属性提升的用法,这个特性对于一些需要在构造器中设置或初始化一些类属性的时候非常有用(包括public、protected和private),比如在PHP7中你可以这样定义一个类的属性,然后在构造方法中传值。class Point {  &nb