开发人员 Brent 发表了一篇文章,详细介绍了 2019 年的 PHP 情况。

Brent 承认 PHP 仍然存在一些问题。 例如,许多核心功能仍然存在不一致的方法签名,配置设置仍然混乱。 不过,根据他自己的开发经验,他认为PHP是Web开发的绝佳选择。 使用 PHP,他可以创建可靠、可维护且高质量的应用程序,他和他的客户都对最终结果感到满意。
在文章中,Brent 重点介绍了 PHP 多年来发展的好的方面。 他通过几点解释“PHP 不再像十年前那样是糟糕的语言”:
PHP 正在积极开发,每年都会发布新版本
当前的 PHP 版本是 7.3,于去年 12 月发布。 7.4预计将于今年年底发布,7.4之后的下一个版本将是PHP 8.0。

从5.X时代开始,核心团队每年都想发布一个新版本,并且他们在过去的四年里成功地保持了这样的发布周期。 通常,每个新版本都会得到两年的官方积极支持,然后是一年的安全修复,目的是激励 PHP 开发人员尽可能保持更新。

更具体的发布和维护周期可以查看PHP官网的介绍:
看看上表,你可能会发现版本号从5跳到了7。那么PHP 6去哪儿了呢?
顺便来科普一下吧。 事实上,早在2005年,PHP社区就发起了PHP 6。但由于实施难度太大,该项目最终流产。 PHP 官方没有发布 PHP 6 GA,并于 2010 年取消了 PHP 6。尽管 PHP 6 项目被取消,但其实现的大量功能被集成到 PHP 5.X 中,包括 OOP 方面的改进,使得 PHP 从流程-面向对象到面向对象。
PHP 6被取消,但之前这个大版本的开发都是以PHP 6的名义进行的,所以很多参考资料和书籍都使用“PHP 6”来指代这个版本。 官方担心这样会在放弃 PHP 6 后造成混乱,所以干脆不使用 PHP 6.X 版本号,直接从 5 跳到 7。
详细请看官方说明:
PHP 5 之后性能持续提升
在PHP 7.0中,PHP的核心部分被完全重写,带来了最新的Zend引擎,使PHP性能提升了两到三倍。
作者引用基准测试来说明这一点,指出 PHP 性能自 7.0 以来一直在提高,PHP Web 应用程序在某些情况下比其他语言的 Web 框架表现得更好。 但他也表示:“当然 PHP 框架不会打败 C 和 Rust,但它会比 Rails 好很多或者可以媲美。”
有一个由框架、包和平台组成的非常活跃的语言生态系统。
说到PHP框架,不得不说一下,但作者表示,它绝对不能代表当前的PHP生态系统:“PHP框架不再是唯一的”。
目前 PHP 有两个主要的 Web 应用程序开发框架: 和 ,以及 Zend、Yii、Cake 和 Code,此外还有许多较小的框架。
Youdu拥有庞大的软件包和软件生态系统,包括管理面板和CRM、独立软件包、CI、分析器、Web服务器、队列管理器和支付集成等。
另外,近年来PHP异步框架也兴起,其中以Amp、Amp、Amp最为出色。 它们是用 PHP 或其他语言编写的框架和服务器,用于运行真正的异步 PHP。
作者认为衡量 PHP 生态系统当前状态的一种方法是查看这个主要 PHP 包存储库的数据。 通过下面的趋势图,可以发现软件包的数量呈指数增长,目前有223,217个记录的软件包,安装总数达到了14,827,204,847。 PHP生态系统不再像以前那么弱。

各种版本可用包的数量

每月安装的软件包数量
此外,您还可以查看PHP使用统计和市场定位的最新数据:
PHP 不断发展,在过去几年中添加了许多新功能
虽然async和await这两个被强烈要求的功能还没有实现,但近年来PHP的新功能不断出现,并且语言本身在各个方面都得到了改进。
下面列出了一些受到广泛关注的 PHP 新功能:
短闭包,也称为箭头函数,是在 PHP 中编写较短函数的一种方法。 当将闭包传递给诸如 或 之类的函数时,闭包非常有用。
// A collection of Post objects $posts = [/* … */];
$ids = array_map(fn($post) => $post->id, $posts);
空合并运算符,与三元运算符类似,但左操作数的行为类似于 isset,而不是仅使用其布尔值。 这使得该运算符对于数组特别有用。 当未设置变量时,它还会分配默认值。
$undefined ?? 'fallback'; // 'fallback'
$unassigned;
$unassigned ?? 'fallback'; // 'fallback'
$assigned = 'foo';
$assigned ?? 'fallback'; // 'foo'
'' ?? 'fallback'; // ''
'foo' ?? 'fallback'; // 'foo'
'0' ?? 'fallback'; // '0'
0 ?? 'fallback'; // 0
false ?? 'fallback'; // false
是一种重用代码的机制,可以减少单继承的一些限制。 类组合的语义定义了降低复杂性并避免与多重继承和继承相关的典型问题的方法。
Trait 与类类似,但仅用于以细粒度且一致的方式对函数进行分组。 它是对传统继承的补充,可以实现行为的横向组合。 类成员不需要继承。
trait ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
/* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo;
/* ... */
}
?>
属性类型化,类变量可以定义类型,如:
class A
{
public string $name;
public Foo $foo;
}
运算符,一种新语法,可以直接在调用中解包参数,例如:
call_user_func_array([$db, 'query'], array_merge(array($query), $params));
数组 $ 可以使用新语法直接扩展:
$db->query($query, ...$params);
JIT 是一种编译器策略,它将代码表示为中间状态,在运行时将其转换为依赖于体系结构的机器代码,并即时执行。 在 PHP 中,这意味着 JIT 将 Zend VM 生成的指令视为中间表示,并以依赖于体系结构的机器代码执行它们。 也就是说,托管代码的不再是Zend VM,而是底层CPU。 。
,外部函数接口,允许从纯脚本语言调用C函数,使用C数据类型,从而更有效地开发“系统代码”。 对于 PHP,FFI 开辟了一种使用纯 PHP 编写 PHP 扩展并绑定到 C 库的方法。
用于创建简单一次性对象的匿名类:
// Pre PHP 7 code
class Logger
{
public function log($msg)
{
echo $msg;
}
}
$util->setLogger(new Logger());
// PHP 7+ code
$util->setLogger(new class {
public function log($msg)
{
echo $msg;
}
});
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1