PHP8

深入了解PHP8 JIT(即时编译)功能

(Just-In-Time)即时编译器PHP 8.0中最重要的新功能之一。JIT可以通过将PHP应用程序的全部或经常调用的部分作为CPU机器代码编译并存储并直接执行,从而绕过Zend VM及其过程开销,从而提高性能。

JIT是传统解释器和AOT编译器的混合体。混合模型带来了这两种方法的利弊,而经过微调的应用程序可以胜过JIT的弊端。

PHP的JIT实施是Dmitry Stogov付出的巨大努力,历时数年之久的讨论,实施和测试都是如此。


PHP JIT:
PHP 8.0的JIT基础概述和配置选项,请参阅PHP 8.0:JIT
这篇文章是关于基准,JIT如何工作以及理想的配置选项的。


大多数PHP应用程序都接受HTTP请求,从数据库中检索和处理数据,并返回结果。IO通常是重要的性能瓶颈:从磁盘读取数据,写入和网络请求。

PHP 8.0引入了JIT,以提高PHP应用程序的性能,但它也增加了调试的障碍,因为应用程序的某些部分可能作为CPU机器代码缓存,而标准PHP调试器无法使用。PHP 8.0的JIT pull-request在PHP代码库中增加了50,000多个新行,因此,除了从事JIT的开发人员之外,PHP核心开发人员本身可能并不精通。


PHP虚拟机

PHP代码一旦处理(标记,解析,构建AST和构建操作码),便在Zend虚拟机上运行。与Java和JavaScript相似,虚拟机对应用程序的硬件方面进行了抽象,从而可以“运行” PHP源代码而无需编译。

Opcache扩展可以帮助将操作码存储在共享内存中,从而跳过重复的标记化/解析/操作码步骤。…

                    

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

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

class Point {
    public int $x;
    private string $y;

    public function __construct(int $x = 0, string $y='') {
        $this->x = $x;
    

PHP8.0 JIT介绍,及如何在PHP 8中设置JIT

PHP 8在PHP的内核中添加了JIT(即时编译)编译器,可以极大地提高性能。

解释程序语言没有编译步骤,可以直接在虚拟机中执行代码。实际上,包括PHP在内的大多数解释型语言都有一个轻量级的编译步骤来提高其性能。

另一方面,使用Ahead-Of-Time(AOT)编译进行编程的语言要求在运行代码之前首先对其进行编译。

即时编译是解释器和提前编译的混合模型,部分或全部代码通常在运行时进行编译,而无需开发人员手动进行编译。

PHP历史上是一种解释语言,所有代码都是由虚拟机(Zend VM)解释的。通过引入由PHP代码生成的Opcache和Opcodes,可以对此进行更改,并且可以将其缓存在内存中。PHP 7.0添加了AST(抽象语法树)的概念,该概念进一步将解析器与编译器分离。

PHP的JIT内部使用LuaJIT的DynASM,并作为Opcache的一部分实现。

深入
了解JIT有关最佳JIT配置,基准以及JIT如何工作的详细指南

Opcache可以检查使用的代码(通常称为热代码),并将它们的编译版本存储在共享的Opcache内存中。什么时候应该编译代码,什么时候应该编译代码是可配置的。

平台支持

当前在运行在x86和x64处理器指令集上的Linux和Windows系统上启用了JIT。当前不支持Apple M1和ARM CPU。

DynASM是PHP JIT中使用的编译器,它也支持ARM指令,但是尚不清楚PHP JIT是否可以在ARM处理器上运行。

如果CPU支持JIT,则JIT也可以使用AVX。2011年及以后的大多数消费者和服务器级处理器都支持AVX指令。cat /proc/cpuinfo | grep

            

如何安装与升级到 PHP 8.0 (Debian/Ubuntu)

PHP 8.0 带来了一些新功能,并在性能,语法,安全性和稳定性方面进行了改进。借助目前所有受支持的Debian和Ubuntu版本中可用的预编译软件包,可以轻松地在几乎任何类型的服务器/开发设置上安装PHP 8.0。

目前尚无PHP 8.0的普遍可用版本。尽管PHP 8.0当前处于功能冻结状态,但有可能在2020年11月发布更稳定的版本之前进行许多更改。对于生产系统,请等待正式的稳定版本。

    

PHP 8的 Attributes新特性介绍

从PHP 8开始,我们将能够使用Attributes。Attributes(在许多其他语言中也称为annotations)的目标是将元数据添加到类,方法,变量等中;以结构化的方式。

attributes的概念根本不是什么新概念,多年来,我们一直在使用docblock来模拟其行为。但是,通过添加attributes,我们现在有了该语言的一等公民来表示这种元数据,而不必手动解析docblock。

那它们长什么样呢?我们如何制作自定义attributes?有什么警告吗?这些是本文将要回答的问题。让我们深入!…

    

一文详解 PHP 8 的新特性

 

PHP 8 将于 2020 年 11 月 26 日发布。这是一个新的主要版本,这意味着它将引入一些突破性的更改,以及许多新功能和性能改进。现在 PHP 8 在功能冻结中,这意味着不能再添加任何新功能了。

由于重大更改,您需要在代码中进行一些更改才能在 PHP 8 上运行。但是,如果您已经跟上最新版本,升级应该不会太难,因为大多数重大更改以前在 7.* 版本中已弃用。别担心,所有这些弃用都列在这篇文章中。

除了突破性变化外,PHP 8 还带来了一系列不错的新功能,如 JIT 编译器、联合类型、attributes等。