返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >浅谈PHP 8.2的更新进展
  • 477
分享到

浅谈PHP 8.2的更新进展

PHP 2023-05-14 19:05:12 477人浏览 薄情痞子
摘要

PHP 8.2 带来了类型系统改进、只读 `readonly` 类、敏感参数隐藏支持、新的随机 `random` 扩展,以及包括简化和现代化 php 在内的多项功能,下面一起来看一下,希望对大家有帮助。PHP 8.2 带来了类型系统改进、只

PHP 8.2 带来了类型系统改进、只读 `readonly` 类、敏感参数隐藏支持、新的随机 `random` 扩展,以及包括简化和现代化 php 在内的多项功能,下面一起来看一下,希望对大家有帮助。

浅谈PHP 8.2的更新进展

PHP 8.2 带来了类型系统改进、只读 readonly 类、敏感参数隐藏支持、新的随机 random 扩展,以及包括简化和现代化 PHP 在内的多项功能。

PHP 8.2 是 PHP 迈入现代化的重要里程碑。除了令人兴奋的新功能和改进之外,PHP 8.2 通过弃用动态属性支持、对 INI 配置值发出警告和修复一系列数组排序字符串转换的遗留行为。

类型系统改进

PHP 8.2 解决了数个原有类型系统的短处和限制,让 PHP 项目得以拥有更好的类型安全性。这包括添加对 true 类型的支持,并允许将 nullfalse 用作独立类型,同时增加了对 DNF 类型的支持。

Disjoint NORMal Form (DNF) 类型支持 - 在 PHP 8.2 中,开发者可以组合使用联合 uNIOn 类型(PHP 8.0)和交集 intersection 类型(PHP 8.1),继而允许声明更加精确的参数、返回和属性类型。

function process((htmlRequest & RequestInterface) | apiRequest $request) {
 // ...
}

(HTMLRequest & RequestInterface) | APIRequest 类型声明表示 $request 必须是 APIRequest 的示例,或者实现了 HTMLRequestRequestInterface

另一方面,在加入了 truefalse 独立类型后,可以将固定返回值的 bool 类型更改为具体的类型。

function alwaysReturnsFalse(): false {}

function alwaysReturnsNull(): null {}

function alwaysReturnsTrue(): true {}

在过去,我们已经可以通过 string|null 的形式来定义可以为空的参数,而在 PHP 8.2 中,我们将可以直接使用 null 作为一个独立类型。

只读 readonly

PHP 8.1 添加了只读属性支持,只读类型只能在初始化时被赋值一次,其后的修改会被 PHP 阻止。

而 PHP 8.2 将只读属性延申到只读类中。当一个类被声明为只读类后,它的所有属性都会被自动声明为只读。此外,它还会确保只读类中的所有属性都带有类型声明。

// PHP 8.2
readonly class User {
	public string $username;
	public int $uid;
}

// PHP 8.1 等效写法
class User {
	public readonly string $username;
	public readonly int $uid;
}

全新随机 random 扩展

纵观 PHP 历史,它支持了各种随机数生成器(RNG)。每种生成器都具有不同的性能、使用场景和安全性。而 PHP 8.2 将所有 RNG 相关的功能重构成名为 random 新扩展。

random 扩展与现有的 API 保持兼容,同时提供相同的功能,因此 rand mt_rand random_bytes random_int 等函数可以继续工作,没有任何变化。但 random 扩展提供了全新的面向对象的 API 来生成具有模块化架构的随机数,令模拟 RNG 和提供新的 RNG 变得更加容易,使测试项目更加安全且便利。

Trait 中的常量

PHP 8.2 允许在 Trait 中定义常量。当然,你不能直接访问 Trait,但 Trait 中的常量会在被继承时成为类常量。

trait FooBar {
	const FOO = 'foo';
	private const BAR = 'bar';
	final const BAZ = 'baz';
	final protected const QUX = 'qux';
}

class Test {
	use FooBar;
}

echo Test::BAZ; // 'bar'

需要注意的是,Trait 中的常量不可以和其他 Trait 或类中的常量冲突。

支持隐藏敏感参数

PHP 8.2 新增了 #[\SensitiveParameter] 参数注解,用于在错误和堆栈信息中隐藏实际值。

接受密码、私钥或其他敏感信息的函数可以使用 #[\SensitiveParameter] 来隐藏具体值。如果发生错误或异常,对应的值会被替换为 \SensitiveParameterValue 对象。

PHP 的内置函数(如 passWord_hashpassword_verify)已使用 #[\SensitiveParameter] 参数注解。

- function passwordHash(string $password)  {

+ function passwordHash(#[\SensitiveParameter] string $password)  {
        debug_print_backtrace();
    }
    passwordHash('hunter2');
array(1) {
    [0]=> array(4) {
        ["file"]=> string(38) "..."
        ["line"]=> int(9)
        ["function"]=> string(3) "foo"
        ["args"]=> array(1) {
-           [0]=> string(38) "hunter2"
+           [0]=> object(SensitiveParameterValue)#1 (0) {}
        }
    }
}

新函数和类

解析 INI 容量 ini_parse_quantity

ini_parse_quantity('256M'); // 268435456

保持 CURL 连接 curl_upkeep

PHP 8.2 Curl 扩展中的 curl_upkeep 函数触发底层 Curl 库运行必要的任务以保持 Curl 连接处于活动状态。 此函数最常见的用例是通过定期调用 curl_upkeep 函数来保持 Http 持久连接 (Keep-Alive)。

获取加密密钥长度 openssl_cipher_key_length

在 PHP 8.2 OpenSSL 中,有一个名为 openssl_cipher_key_length 的新函数,它返回任何受支持的 OpenSSL 密码所需的密钥长度(以字节为单位)。

此功能消除了对 OpenSSL 密码操作所需密钥长度进行硬编码的需要。

openssl_cipher_key_length("CHACHA20-POLY1305"); // 32

openssl_cipher_key_length("AES-128-GCM"); // 16

openssl_cipher_key_length("AES-256-GCM"); // 32

重置记录的内存使用峰值 memory_reset_peak_usage

PHP 8.2 添加了一个名为 memory_reset_peak_usage 的新函数,用于重置由 memory_get_peak_usage 函数返回的峰值内存使用量。

这对于多次调用或迭代一个动作并且需要记录每次调用的峰值内存使用量的应用程序很有帮助。 如果没有 memory_reset_peak_usage 函数重置内存使用情况,memory_get_peak_usage 将会返回整个运行过程中的绝对峰值内存使用情况。

PHP 8.2 弃用情况

PHP 8.2 也带来了相当一部分弃用。当语法、函数或特性被弃用时,PHP 会发出弃用通知,该通知不会中断 PHP 应用,但会记录到错误日志中。

弃用动态属性

PHP 8.2 中最值得注意的弃用之一是它弃用了动态声明的类属性。虽然可以忽略错误,但建议在类中声明类属性,加上类型声明就更好了。

class User {
	public int $uid;
}

$user = new User();
$user->name = 'Foo';
Deprecated: Creation of dynamic property User::$name is deprecated in ... on

许多古老的 PHP 应用程序很可能会受到此更改的影响,因为它们在扩展时往往不声明类属性,或者随着变化多年来不断发展。

当然了,选择忽略或例外也是存在的:

  • 匿名类及其子类(stdClass

  • 具有 __get__set 魔术方法的类

  • 具有 #[AllowDynamicProperties] 注解的类

弃用 utf8_encodeutf8_decode 函数

PHP 8.2 终于弃用这两名字跟实际效果不一致的函数,虽然名为 utf8 但实际上是 Latin 1 (ISO-8859-1)。

大多数使用这些函数的 PHP 项目往往没有意识到这个问题。推荐的替代品包括 mbstringiconvintl 扩展以提供更好的功能。

弃用 ${var} 字符串格式

PHP 一直支持使用 foo {$bar} 模式的字符串变量插值,以及将美元符号放在大括号外的替代语法 foo ${bar}

在 PHP 8.2 中,将美元符号放在花括号外的替代语法已弃用。

已弃用推荐替代
Hello ${name}Hello {$name}
Hello {var}Hello {$$var}

此外,PHP 8.2 还弃用了一些部分支持的 callable 模式和 Mbstring 扩展对 Base64、Uuencode、QPrint 和 HTML 实体编码的处理。

以上就是浅谈PHP 8.2的更新进展的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 浅谈PHP 8.2的更新进展

本文链接: https://lsjlt.com/news/203445.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈PHP 8.2的更新进展
    PHP 8.2 带来了类型系统改进、只读 `readonly` 类、敏感参数隐藏支持、新的随机 `random` 扩展,以及包括简化和现代化 PHP 在内的多项功能,下面一起来看一下,希望对大家有帮助。PHP 8.2 带来了类型系统改进、只...
    99+
    2023-05-14
    PHP
  • PHP 8.2 更新啦!一文速览新功能
    PHP 8.2 更新速览Created time: December 8, 2022 10:50 PMLast edited time: December 8, 2022 11:58 PM转自 PHP 8.2 Highlights: Wha...
    99+
    2023-05-14
    php
  • 浅谈React原生APP更新
    目录App更新流程大致的流程图更新APP信息1.首先定义需要获取的文件地址2.通过文件地址, 获取打完包后的版本信息3.替换现有文件中的信息大致流程图总结App更新流程 1.在 Ap...
    99+
    2024-04-02
  • 浅谈Redis缓存更新策略
     内存淘汰超时剔除主动更新说明不用自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时更新缓存给缓存数据添加TTL时间,到期后自动删除缓存,下次...
    99+
    2022-11-13
    redis缓存策略 redis缓存更新策略 redis缓存更新机制
  • 浅谈java定时器的发展历程
    在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作。这时候我们就要去设置个定时器,Java中最方便、最高效的实现方式是用java.util.Timer工具类,再通过调度java.util.TimerTask任务。Time...
    99+
    2023-05-30
    java 定时器 ava
  • PHP与Memcached珠联璧合,浅谈PHP Memcached扩展的优势与应用
    PHP Memcached扩展概述 Memcached是一种高性能的分布式内存缓存系统,它可以将数据存储在内存中,以便快速检索。PHP Memcached扩展允许PHP应用程序使用Memcached来缓存数据。这种缓存机制可以显着提高应...
    99+
    2024-02-15
    PHP Memcached 缓存 性能 可伸缩性
  • 浅谈JS的二进制家族
    目录概述BlobBlob实战Blob下载文件Blob图片本地显示Blob文件分片上传本地读取文件内容ArrayBuffer通过ArrayBuffer的格式读取本地数据通过ArrayB...
    99+
    2024-04-02
  • 谈谈PHP的发展历程和未来趋势
    随着计算机技术的快速发展,编程语言也越来越多。其中,PHP(Hypertext Preprocessor)语言作为一种开源的脚本语言,被广泛应用于Web开发中,如今已经成为最流行的服务器端编程语言之一。而今天,我们来谈一谈PHP的发展历程和...
    99+
    2023-05-14
  • 浅谈oracle 12C的新特性-CDB和PDB
    最近看到好多人都在尝试oracle中的12C新特性-容器数据库,今年3月orcle推出了Release2版本,可以算是一个稳定版本了。下午着手尝试了一下,还是蛮不错得1.前言CDB与PDB是Oracle&n...
    99+
    2024-04-02
  • 浅谈Vim中的Tab与空格缩进
    vim缩进参数解析 缩进用 tab 制表符还是空格,个人爱好问题。但是在大多项目中,习惯使用空格。关于缩进,vim中可以通过如下四个参数进行配置 set tabstop=4 set softtabsto...
    99+
    2022-06-04
    浅谈 空格 Vim
  • 浅谈 PHP 函数的异步编程
    在 php 中,异步编程允许在不阻塞执行流的情况下执行耗时任务。实现异步编程的技术包括:回调函数:函数指针,在另一个函数执行完成后执行代码。协程:轻量级多任务机制,允许在同一线程中切换多...
    99+
    2024-05-05
    php 异步编程
  • 浅谈如何循序渐进的学好JS
    目录概述1.清楚js的定位2.清晰的学习路线3.自律坚持4.多练多写5.从多角度去学习和领悟6.注意培养自信心7.多写学习总结8.构建专属知识导图概述 在我们第一阶段完成HTML+C...
    99+
    2024-04-02
  • 浅谈并发处理PHP进程间通信之System V IPC
    目录前言Unix System V IPC信号量共享内存消息队列函数介绍ftoksemaphore函数shared_memory函数代码实现小结前言 它的安装和使用非常简单,在编译 ...
    99+
    2024-04-02
  • 浅谈Java、PHP、C++编程的优缺点
    Java 、PHP、C++ 编程语言都是非常流行的编程语言,在开发、Web 开发、移动应用开发等领域都有广泛的应用。本文将从以下几个方面分析 Java、PHP、C++ 编程语言的优缺点。   一、Java 编程语言的优缺点  优点 (1)...
    99+
    2023-08-31
    php java c++
  • 浅谈PHP时间戳增加的方法
    在PHP程序开发中,时间戳是经常用到的一个工具,它可以快速地对时间进行处理。但是,有时候我们需要对时间戳进行增加操作,比如在某一时间加上一定的秒数,或者将时间戳按照特定的格式输出。本文将介绍PHP时间戳增加的方法,帮助大家更好地处理时间。1...
    99+
    2023-05-14
  • 浅谈Vue灰度发布新功能的使用
    目录概述组件级别页面级别方案一 新增入口页面分发方案二 高阶组件方案方案三 动态Router.js引入总结参考什么是灰度发布?百度百科的解释如下。 灰度发布是指在黑与白之间,能够平滑...
    99+
    2024-04-02
  • 浅谈Spring Data Redis读不到设进去的值
    目录目标1 注意读、取一致性解析AbstractOperations#rawKey修正目标 精通 Spring Data Redis 操作流程。 Spring Data提供了对市场上...
    99+
    2024-04-02
  • 浅谈并发处理PHP进程间通信之外部介质
    目录进程间通信文件flock代码实现mysqlselect for update代码实现redisincrSETNX代码实现优化总结进程间通信 进程间通信,指至少两个进程或...
    99+
    2024-04-02
  • 浅谈多线程_让程序更高效的运行
    Java Thread 的一些认识:Java是抢占式线程,一个线程就是进程中单一的顺序控制流,单个进程可以拥有多个并发任务,其底层是切分CPU时间,多线程和多任务往往是使用多处理器系统的最合理方式进程可以看作一个程序或者一个应用;线程是进程...
    99+
    2023-05-31
    多线程 更高
  • 浅谈如何提高PHP代码的质量
    目录概述1 必备条件2 构建工具3 静态代码分析4 代码风格5 复制 / 粘贴检测器6 想要真正深入的代码分析?概述 我们可以将此归咎于许多原因,但这肯定不仅仅是因为 PHP 生态系...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作