search
HomeBackend DevelopmentPHP TutorialPHP8.2 has been released, come and see what changes are there!

PHP8.2 has been released, come and see what changes are there!

PHP8.2 is an important milestone in the modernization process of the PHP language. In addition to exciting new features and improvements, PHP 8.2 also simplifies the language, removes support for dynamic class attributes, issues warnings when certain non-optimal ini configurations are encountered, and fixes a number of fixes that affect PHP Legacy PHP behavior for array sorting and certain types of string conversion/encoding operations. [Recommended learning: PHP video tutorial]

System improvements

PHP8.2 solves several shortcomings and limitations of the PHP type system, allowing PHP applications adopt better type safety. Including adding the true type, allowing null and false to be used as independent types, and supporting DNF types (generic parsing).

PHP8.2 supports separate paradigm types and can now combine union types and communicative types, which can define parameters, return values ​​and properties with precise and expressive declarations.

Before php8.2

class Foo {
    public function bar(mixed $entity) {
        if ((($entity instanceof A) && ($entity instanceof B)) || ($entity === null)) {
            return $entity;
        }

        throw new Exception('Invalid entity');
    }
}

Now

class Foo {
    public function bar((A&B)|null $entity) {
        return $entity;
    }
}

supports true and false as independent types, if bool can be used to declare when it is always the same.

function alwaysReturnsFalse(): false {}

function alwaysReturnsNull(): null {}

function alwaysReturnsTrue(): true {}

The type null can be used in union type declarations in previous versions, and can now be used independently.

Read-only class

PHP8.1Added a readonly attribute declaration. A readonly property can only be set once, and PHP will prevent any modification within the scope.

PHP8.2To further use the readonly declaration, you can declare the class as readonly. When a class is declared readonly, all its properties are automatically declared readonly. Additionally, this class cannot use dynamic properties, ensuring that all properties are defined.

readonly class User {
    public string $username;
    public string $uid;
}

All attributes will be automatically declared readonly.

New random number extension

In the historical development of PHP, it supports a variety of random number generators, they have Different levels of performance and different use cases, and suitable for security applications. PHP8.2 goes one step further and refactors all random number-related functions into an extension called random. The new extension will not break any existing interface usage, so existing rand, mt_rand functions will continue to work without any changes. It also provides an object interface to generate random numbers with a pluggable architecture, so it is easy to simulate random number generators and provide new random number generators, making applications safe and easy to test. .

traitConstant In

PHP8.2

, you can use trait Constants are declared in . trait cannot be accessed directly, but when a class uses trait, these constants become class constants.

trait Foo
{
    public const CONSTANT = 1;
}

class Bar
{
    use Foo;
}

var_dump(Bar::CONSTANT); // 1
var_dump(Foo::CONSTANT); // Error

Sensitive parameter support

PHP8.2

Added a new built-in parameter attribute naming: #[\SensitiveParameter]. Enables PHP to hide actual values ​​in stack traces and error messages. We often define passwords, secret keys or other sensitive information in parameters or attributes. When

PHP

an error occurs, these values ​​will be logged. Displayed on the screen or recorded in the log. So people can get sensitive data through these methods. For example, the following example:

function passwordHash(#[\SensitiveParameter] string $password)  {

       debug_print_backtrace();

 }

 passwordHash('hunter2');

The printed content is as follows:

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) {}

  }
 }
}

hunter2不会被打印出来。

新的函数和类

解析INI数量值:ini_parse_quantity

PHP ini值识别成字节。

ini_parse_quantity('256M'); // 268435456

curl维持活动:<strong>curl_upkeep</strong>

PHP8.2中,curl扩展会触发底层curl库来运行必要任务,以保持curl连接存活。最常见的用法就是定期调用curl_upkeep来实现http持久连接(keep-alive

检索密码长度:<strong>openssl_cipher_key_length</strong>

PHP8.2 OpenSSL中,有一个名为openssl_cipher_key_length的函数,能够接受任何支持的密码所需的秘钥长度,在之前需要硬编码才能实现:

openssl_cipher_key_length("CHACHA20-POLY1305"); // 32
openssl_cipher_key_length("AES-128-GCM"); // 16
openssl_cipher_key_length("AES-256-GCM"); // 32

重置记录的峰值内存使用量:<strong>memory_reset_peak_usage</strong>

这对于多次调用或迭代调用时很有用。

PHP8.2中的弃用

PHP8.2也带来了相当一部分的弃用。当语法、函数和特性被弃用时,PHP会发起一个弃用通知,该通知不应该中断PHP程序,但会被记录到错误日志中。

注意:PHP8.0以后,PHP的默认错误报告行为是E_ALL

已弃用动态属性

PHP8.2中最值得注意的弃用之一就是弃用动态属性。如果一个类属性没有声明就被调用或赋值,就会退出程序。

class User {
    public int $uid;
}

$user = new User();
$user->name = &#39;Foo&#39;;

这个可能会影响到很多的的PHP遗留程序,推荐的修复方法是在类型中声明属性。

对此也有例外用法,比如stdClass和它的子类将正常使用,__get和__set魔术方法将正常使用,或者声明#AllowDynamicProperties。

其他一些弃用可以关注本站其他文章:

PHP8.2中字串变量解析的新用法》https://phpreturn.com/index/a628de16a2adf8.html

安装和升级到PHP8.2

PHP 8.2现在可以在所有常规源代码中下载/安装:

  • Windows:编译后的二进制文件可在windows.php.net

  • Ubuntu/Debian: PHP 8.2可用ondrej/phpPPA

  • Fedora/RHEL/CentOS/Alma/Rocky:可以在Remi的源中获取

  • Mac OS: PHP 8.2可以通过Homebrew安装shivammathur/homebrew-php利用.

  • Docker:可以通过8.2*版本获取PHP 8.2

PHP8.2 has been released, come and see what changes are there!

PHP8.2 has been released, come and see what changes are there!

原文地址:https://phpreturn.com/index/a639285aa925ed.html

原文平台:PHP武器库

更多编程相关知识,请访问:编程教学!!

The above is the detailed content of PHP8.2 has been released, come and see what changes are there!. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:phpreturn. If there is any infringement, please contact admin@php.cn delete
What data can be stored in a PHP session?What data can be stored in a PHP session?May 02, 2025 am 12:17 AM

PHPsessionscanstorestrings,numbers,arrays,andobjects.1.Strings:textdatalikeusernames.2.Numbers:integersorfloatsforcounters.3.Arrays:listslikeshoppingcarts.4.Objects:complexstructuresthatareserialized.

How do you start a PHP session?How do you start a PHP session?May 02, 2025 am 12:16 AM

TostartaPHPsession,usesession_start()atthescript'sbeginning.1)Placeitbeforeanyoutputtosetthesessioncookie.2)Usesessionsforuserdatalikeloginstatusorshoppingcarts.3)RegeneratesessionIDstopreventfixationattacks.4)Considerusingadatabaseforsessionstoragei

What is session regeneration, and how does it improve security?What is session regeneration, and how does it improve security?May 02, 2025 am 12:15 AM

Session regeneration refers to generating a new session ID and invalidating the old ID when the user performs sensitive operations in case of session fixed attacks. The implementation steps include: 1. Detect sensitive operations, 2. Generate new session ID, 3. Destroy old session ID, 4. Update user-side session information.

What are some performance considerations when using PHP sessions?What are some performance considerations when using PHP sessions?May 02, 2025 am 12:11 AM

PHP sessions have a significant impact on application performance. Optimization methods include: 1. Use a database to store session data to improve response speed; 2. Reduce the use of session data and only store necessary information; 3. Use a non-blocking session processor to improve concurrency capabilities; 4. Adjust the session expiration time to balance user experience and server burden; 5. Use persistent sessions to reduce the number of data read and write times.

How do PHP sessions differ from cookies?How do PHP sessions differ from cookies?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

How does PHP identify a user's session?How does PHP identify a user's session?May 01, 2025 am 12:23 AM

PHPidentifiesauser'ssessionusingsessioncookiesandsessionIDs.1)Whensession_start()iscalled,PHPgeneratesauniquesessionIDstoredinacookienamedPHPSESSIDontheuser'sbrowser.2)ThisIDallowsPHPtoretrievesessiondatafromtheserver.

What are some best practices for securing PHP sessions?What are some best practices for securing PHP sessions?May 01, 2025 am 12:22 AM

The security of PHP sessions can be achieved through the following measures: 1. Use session_regenerate_id() to regenerate the session ID when the user logs in or is an important operation. 2. Encrypt the transmission session ID through the HTTPS protocol. 3. Use session_save_path() to specify the secure directory to store session data and set permissions correctly.

Where are PHP session files stored by default?Where are PHP session files stored by default?May 01, 2025 am 12:15 AM

PHPsessionfilesarestoredinthedirectoryspecifiedbysession.save_path,typically/tmponUnix-likesystemsorC:\Windows\TemponWindows.Tocustomizethis:1)Usesession_save_path()tosetacustomdirectory,ensuringit'swritable;2)Verifythecustomdirectoryexistsandiswrita

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.