찾다
백엔드 개발PHP8PHP 8.2의 업데이트 진행 상황에 대한 간략한 토론

PHP 8.2는 유형 시스템 개선, 읽기 전용 `읽기 전용` 클래스, 민감한 매개변수 숨기기 지원, 새로운 무작위 `임의` 확장, PHP 단순화 및 현대화를 포함한 많은 기능을 제공합니다. 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

PHP 8.2의 업데이트 진행 상황에 대한 간략한 토론

추천 학습: "PHP 비디오 튜토리얼"

PHP 8.2는 유형 시스템 개선, 읽기 전용 readonly 클래스, 민감한 매개변수 숨기기 지원 및 새로운 무작위 random 확장 기능과 PHP를 단순화하고 현대화하는 기능을 제공합니다. <code>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

PHP 8.2는 PHP 현대화의 중요한 이정표입니다. 흥미로운 새로운 기능과 개선 사항 외에도 PHP 8.2는 동적 속성 지원을 중단하고 INI 구성 값에 대한 경고를 표시하며 배열 정렬 및 문자열 변환에 대한 여러 레거시 동작을 수정하는 방식으로 작동합니다. 🎜

유형 시스템 개선

🎜PHP 8.2는 원래 유형 시스템의 몇 가지 단점과 한계를 해결하여 PHP 프로젝트의 유형 안전성을 향상시킵니다. 여기에는 true 유형에 대한 지원 추가, nullfalse를 독립 유형으로 사용할 수 있도록 허용하는 것, DNF 유형에 대한 지원 추가가 포함됩니다. 🎜
🎜Disjoint Normal Form(DNF) 유형 지원 - PHP 8.2에서 개발자는 Union union 유형(PHP 8.0)과 교차점 intersection 유형(PHP 8.0)을 결합할 수 있습니다. 8.1) 이를 통해 보다 정확한 매개변수, 반환 및 속성 유형을 선언할 수 있습니다. 🎜
openssl_cipher_key_length("CHACHA20-POLY1305"); // 32

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

openssl_cipher_key_length("AES-256-GCM"); // 32
🎜(HTMLRequest & RequestInterface) | APIRequest 유형 선언은 $requestAPIRequest의 인스턴스이거나 구현되어야 함을 의미합니다. HTMLRequest 및 RequestInterface. 🎜🎜한편, truefalse 독립 유형을 추가한 후 고정 반환 값 bool 유형을 특정 유형으로 변경할 수 있습니다. . 🎜
class User {
	public int $uid;
}

$user = new User();
$user->name = 'Foo';
🎜기존에는 string|null 형식으로 null 허용 매개변수를 정의할 수 있었지만, PHP 8.2에서는 null을 직접 사용할 수 있게 되었습니다. 독립형으로. 🎜

읽기 전용 readonly 클래스

🎜PHP 8.1에는 읽기 전용 속성에 대한 지원이 추가되었습니다. 읽기 전용 유형은 실행 중에 한 번만 할당할 수 있습니다. 이후의 수정은 PHP에 의해 차단됩니다. 🎜🎜그리고 PHP 8.2는 읽기 전용 속성을 읽기 전용 클래스로 확장합니다. 클래스가 읽기 전용으로 선언되면 모든 속성이 자동으로 읽기 전용으로 선언됩니다. 또한 읽기 전용 클래스의 모든 속성에 유형 선언이 있는지 확인합니다. 🎜
Deprecated: Creation of dynamic property User::$name is deprecated in ... on

새로운 무작위 random 확장

🎜PHP는 역사 전반에 걸쳐 다양한 난수 생성기(RNG)를 지원해 왔습니다. 각 생성기는 성능, 사용 시나리오 및 보안이 다릅니다. PHP 8.2는 모든 RNG 관련 함수를 random이라는 새로운 확장으로 재구성합니다. 🎜🎜random 확장은 동일한 기능을 제공하면서 기존 API와 계속 호환되므로 rand mt_rand random_bytes 함수 random_int와 같은 것은 변경 없이 계속 작동할 수 있습니다. 그러나 random 확장은 모듈식 아키텍처로 난수를 생성하는 새로운 객체 지향 API를 제공하므로 RNG를 더 쉽게 시뮬레이션하고 새로운 RNG를 제공할 수 있으므로 테스트 프로젝트가 더 안전하고 편리해집니다. 🎜

특성의 상수

🎜PHP 8.2에서는 특성에 상수를 정의할 수 있습니다. 물론 Traits에 직접 접근할 수는 없지만 Traits에 있는 상수는 상속되면 클래스 상수가 됩니다. 🎜rrreee🎜특성의 상수는 다른 특성이나 클래스의 상수와 충돌할 수 없다는 점에 유의하세요. 🎜

민감한 매개변수 숨기기 지원

🎜PHP 8.2에는 오류 및 스택 정보 실제 값을 숨기기 위한 #[SensitiveParameter] 매개변수 주석이 추가되었습니다. 🎜🎜비밀번호, 개인 키 또는 기타 민감한 정보를 허용하는 함수는 #[SensitiveParameter]를 사용하여 특정 값을 숨길 수 있습니다. 오류나 예외가 발생하면 해당 값이 SensitiveParameterValue 개체로 대체됩니다. 🎜🎜 password_hashpassword_verify와 같은 PHP의 내장 함수에는 #[SensitiveParameter] 매개변수가 주석으로 추가됩니다. 🎜rrreeerrree

새로운 함수 및 클래스

INI 용량 구문 분석ini_parse_quantity

rrreee

CURL 연결 유지curl_upkeep Strong>

🎜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视频教程

위 내용은 PHP 8.2의 업데이트 진행 상황에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 掘金에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구