PHP8

PHP 8.2 中弃用的动态属性

与次要版本一样,PHP 8.2增加了一些弃用。弃用通常是令人沮丧的根源,但重要的是要意识到它们实际上非常有帮助。我已经写过关于处理一般弃用的文章,所以如果你已经感到沮丧,也许最好先看看那个帖子。今天,我想关注一个特别是在 PHP 8.2 中的弃用:弃用的动态属性。

所以首先,什么是动态属性?好吧,它们是类定义中不存在的属性,但在运行时动态设置在这些类的对象上。

例如这个Post类没有name属性,但是我们在运行时设置它:

class Post
{
}

// …

$post = new Post();

$post->name = 'Name';

var_dump($post->name); // 'Name'

自 PHP 8.2

    

PHP 8.2 新特性

PHP 8.2 将于2022 年 12 月 8 日发布。在本文中,我们将逐一介绍所有新特性、性能改进、更改和弃用。

只读类RFC

PHP 8.1 中引入了只读属性。此 RFC 构建在它们之上,并添加了语法糖以使所有类属性同时变为只读。代替这样写:

class Post
{
    public function __construct(
        public readonly string $title, 
        public readonly Author $author,
        public readonly string $body
            

WordPress从4.9升级到6.0,使用的PHP版本从7.0升级到8.0全过程及问题解决.

WordPress从4.9升级到6.0,使用的PHP版本从7.0升级到8.0全过程及问题解决.

步骤:

一.在wordpress后台,更新程序,从wordpress4.9在线升级到6.0.

更新过程会升级wordpress程序与数据库. 一切自动完成.

二.更新wordpress插件

在插件管理处,更新可升级的插件.

三.wordpress 升级到6.0完成.

四.遇到问题.在wordpress后台,F12console中会报 QTags is not defined,

原来错误的原因是由于快速标签脚本的优先加载quicktags.min.js. 在 WordPress 6 及更高版本中,脚本的加载时间比以前的版本稍晚。在以前的 WordPress 版本中,脚本在页面上较早加载,因此在调用QTags.addButton添加按钮时,QTags定义并添加按钮(如预期的那样)。仅供参考:脚本位于:

/wp-includes/js/quicktags.min.js

在 WordPress 版本 6.0 中,Prismatic 调用…

        

PHP升级到8.0后,把Fatal error: Array and string offset access syntax with curly braces is no longer supported in解决

PHP升级到8.0后,把Fatal error: Array and string offset access syntax with curly braces is no longer supported in解决

 

PHP8.0不再能够使用花括号来访问数组或者字符串的偏移.需要将{}修改成[] 就可以解决问题

 

若代码逻辑中含有类似

$asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
需要修改成

$asc = ord($s[0]) * 256 + ord($s[1]) - 65536;…

PHP升级到8.0后,报Fatal error: Uncaught Error: Call to undefined function create_function()解决方案.

PHP升级到8.0后,报Fatal error: Uncaught Error: Call to undefined function create_function()解决方案.

因为php8.0 已经把create_function移除了.所以有2种解决 方法 .

一.是把create_function改为匿名函数.如下所示

<?php
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo $newfunc(2, M_E) . "\n";
?>

改为

<?php
$newfunc = function($a,$b) { 

Symfony 6: PHP 8 Native Types & 为什么我们需要你

Symfony 2.0 以来,Symfony 的最大变化即将到来,这是一个非常激动人心的时刻:Symfony 6 在其所有可能的方法上都具有原生 PHP 类型。这将极大地推动 PHP 开源社区中的类型安全!Nicolas和 Alexander已经断断续续地工作了 2 年,以创造可能的最佳升级体验。
现在,距离稳定版发布还有 2.5 个月,是大放异彩的时候了!特别是如果您维护任何开源项目(甚至没有直接链接到 Symfony),我们很乐意听取您的意见,以确保升级不会非常困难。

        

深入了解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;