PHP8.2 est sorti, venez voir quels sont les changements !

青灯夜游
Libérer: 2023-04-11 09:06:01
avant
6186 Les gens l'ont consulté

PHP8.2 est sorti, venez voir quels sont les changements !

PHP8.2 est une étape importante dans le processus de modernisation du langage PHP. En plus de nouvelles fonctionnalités et améliorations intéressantes, PHP 8.2 simplifie également le langage, supprime la prise en charge des attributs de classe dynamiques, émet des avertissements lorsque certaines configurations ini non optimales sont rencontrées et corrige un certain nombre de correctifs qui affectent le comportement de PHP Legacy PHP pour le tri des tableaux. et certains types d'opérations de conversion/codage de chaînes. [Apprentissage recommandé : Tutoriel vidéo PHP]

Améliorations du système

PHP8.2 résout plusieurs lacunes et limitations du système de type PHP, permettant aux applications PHP d'adopter une meilleure sécurité de type. Y compris l'ajout du vrai type, permettant d'utiliser null et false comme types indépendants et la prise en charge des types DNF (analyse générique).

PHP 8.2 prend en charge les types de paradigmes détachés et peut désormais combiner des types d'union et des types communicatifs, qui peuvent définir des paramètres, renvoyer des valeurs et des propriétés avec des déclarations précises et expressives.

Avant 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');
    }
}
Copier après la connexion

maintenant

class Foo {
    public function bar((A&B)|null $entity) {
        return $entity;
    }
}
Copier après la connexion

prend en charge true et false comme types indépendants, qui peuvent être utilisés pour déclarer si bool est toujours le même.

function alwaysReturnsFalse(): false {}

function alwaysReturnsNull(): null {}

function alwaysReturnsTrue(): true {}
Copier après la connexion

Le type null peut être utilisé dans les déclarations de type union dans les versions précédentes, et peut désormais être utilisé indépendamment.

Classe en lecture seule

PHP8.1 ajoute une déclaration d'attribut readonly. Une propriété readonly ne peut être définie qu'une seule fois, et PHP empêchera toute modification de portée.

PHP8.2Pour utiliser davantage la déclaration readonly, vous pouvez déclarer la classe comme readonly. Lorsqu'une classe est déclarée en lecture seule, toutes ses propriétés sont automatiquement déclarées lecture seule. De plus, cette classe ne peut pas utiliser de propriétés dynamiques, ce qui garantit que toutes les propriétés sont définies.

readonly class User {
    public string $username;
    public string $uid;
}
Copier après la connexion

Tous les attributs seront automatiquement déclarés lecture seule.

Nouvelle extension de nombres aléatoires

Au cours de l'histoire de PHP, il a pris en charge une grande variété de générateurs de nombres aléatoires avec différents degrés de performances et différents cas d'utilisation, et convient aux applications de sécurité. PHP8.2 va encore plus loin et refactorise toutes les fonctionnalités liées aux nombres aléatoires dans une extension appelée random. La nouvelle extension ne rompra aucune utilisation de l'interface existante, donc les fonctions rand et mt_rand existantes continueront de fonctionner sans aucun changement. Il fournit également une interface objet pour générer des nombres aléatoires avec une architecture enfichable, il est donc facile de simuler des générateurs de nombres aléatoires et de fournir de nouveaux générateurs de nombres aléatoires, rendant les applications PHP sûres et faciles à tester.

traitConstantes

Dans PHP8.2, les constantes peuvent être déclarées dans trait. trait n'est pas accessible directement, mais lorsqu'une classe utilise trait, ces constantes deviennent des constantes de la classe.

trait Foo
{
    public const CONSTANT = 1;
}

class Bar
{
    use Foo;
}

var_dump(Bar::CONSTANT); // 1
var_dump(Foo::CONSTANT); // Error
Copier après la connexion

Prise en charge des paramètres sensibles

PHP8.2 a ajouté un nouveau nom d'attribut de paramètre intégré : #[SensitiveParameter]. Permet à PHP de masquer les valeurs réelles dans les traces de pile et les messages d'erreur.

Nous définissons souvent des mots de passe, des clés ou d'autres informations sensibles dans des paramètres ou des attributs. Ces valeurs sont enregistrées lorsqu'une erreur se produit dans PHP. Affiché à l'écran ou enregistré dans le journal. Les gens peuvent donc obtenir des données sensibles grâce à ces méthodes.

Par exemple :

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

       debug_print_backtrace();

 }

 passwordHash('hunter2');
Copier après la connexion

Le contenu imprimé est le suivant :

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

  }
 }
}
Copier après la connexion

hunter2不会被打印出来。

新的函数和类

解析INI数量值:ini_parse_quantity

PHP ini值识别成字节。

ini_parse_quantity('256M'); // 268435456
Copier après la connexion

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
Copier après la connexion

重置记录的峰值内存使用量:<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;;
Copier après la connexion

这个可能会影响到很多的的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 est sorti, venez voir quels sont les changements !

PHP8.2 est sorti, venez voir quels sont les changements !

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

原文平台:PHP武器库

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:phpreturn.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal