Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP 8.2 dikemas kini! Gambaran keseluruhan pantas ciri baharu dalam satu artikel

PHP 8.2 dikemas kini! Gambaran keseluruhan pantas ciri baharu dalam satu artikel

藏色散人
藏色散人ke hadapan
2022-12-09 17:02:166815semak imbas

Gambaran Keseluruhan Kemas Kini PHP 8.2

Masa dibuat: 8 Disember 2022 10:50 PTG

Masa terakhir disunting: 8 Disember 2022 11:58 PTG

Dicetak semula daripadaSorotan PHP 8.2: Apa yang Baharu dan Berubah

? PHP 8.2 membawakan penambahbaikan sistem jenis, kelas baca sahajareadonly, sokongan penyembunyian parameter sensitif, Random baharu sambungan dan ciri termasuk memudahkan dan memodenkan PHP. random

PHP 8.2 ialah peristiwa penting dalam pemodenan PHP. Selain ciri dan penambahbaikan baharu yang menarik, PHP 8.2 berfungsi dengan menghentikan sokongan sifat dinamik, mengeluarkan amaran pada nilai konfigurasi INI dan membetulkan beberapa gelagat warisan untuk pengisihan tatasusunan dan penukaran rentetan. [Disyorkan:

Tutorial video PHP]

Peningkatan sistem jenis

PHP 8.2 menyelesaikan beberapa kelemahan dan pengehadan sistem jenis asal, membolehkan projek PHP mempunyai keselamatan jenis yang lebih baik. Ini termasuk menambah sokongan untuk jenis

dan membenarkan penggunaan true dan null sebagai jenis bebas, serta menambah sokongan untuk jenis DNF. false

Sokongan jenis Disjoint Normal Form (DNF) - Dalam PHP 8.2, pembangun boleh menggabungkan jenis Union

(PHP 8.0) dan jenis Intersection union (PHP 8.1), membenarkan Deklarasi lebih lanjut parameter, pulangan dan jenis harta yang tepat. Pengisytiharan jenis intersection

function process((HTMLRequest & RequestInterface) | APIRequest $request) {
 // ...}

bermakna (HTMLRequest & RequestInterface) | APIRequest mestilah contoh $request atau melaksanakan kedua-dua APIRequest dan HTMLRequest . RequestInterface

Sebaliknya, selepas menyertai jenis bebas

dan true, jenis nilai pulangan tetap false boleh ditukar kepada jenis konkrit. bool

function alwaysReturnsFalse(): false {}

function alwaysReturnsNull(): null {}

function alwaysReturnsTrue(): true {}
Pada masa lalu, kami telah dapat mentakrifkan parameter nullable dalam bentuk

, tetapi dalam PHP 8.2, kami akan dapat menggunakan terus string|null sebagai jenis bebas. null

Baca sahaja

Kelas readonly

PHP 8.1 menambah sokongan untuk jenis baca sahaja hanya boleh diberikan sekali semasa permulaan, dan pengubahsuaian seterusnya akan disekat oleh PHP.

Dan PHP 8.2 memanjangkan atribut baca sahaja kepada kelas baca sahaja. Apabila kelas diisytiharkan baca sahaja, semua sifatnya diisytiharkan baca sahaja secara automatik. Selain itu, ia memastikan bahawa semua sifat dalam kelas baca sahaja mempunyai pengisytiharan jenis.

// 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 Baharu

Sambungan random

Sepanjang sejarah PHP, ia telah menyokong pelbagai penjana nombor rawak (RNG). Setiap penjana mempunyai prestasi, senario penggunaan dan keselamatan yang berbeza. PHP 8.2 menstruktur semula semua fungsi berkaitan RNG menjadi sambungan baharu bernama

. random

sambungan kekal serasi dengan API sedia ada sambil menyediakan kefungsian yang sama, jadi fungsi seperti random rand mt_rand random_bytes boleh terus berfungsi tanpa sebarang perubahan. Tetapi sambungan random_int menyediakan API berorientasikan objek baharu untuk menjana nombor rawak dengan seni bina modular, menjadikannya lebih mudah untuk mensimulasikan RNG dan menyediakan RNG baharu, menjadikan projek ujian lebih selamat dan mudah. random

Pemalar dalam Ciri

PHP 8.2 membenarkan pemalar ditakrifkan dalam Ciri. Sudah tentu, anda tidak boleh mengakses Traits secara langsung, tetapi pemalar dalam Traits menjadi pemalar kelas apabila diwarisi.

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'
Perlu diambil perhatian bahawa pemalar dalam Ciri tidak boleh bercanggah dengan pemalar dalam Ciri atau kelas lain.

Menyokong menyembunyikan parameter sensitif

PHP 8.2 menambah anotasi parameter

baharu untuk menyembunyikan nilai sebenar dalam ralat dan maklumat tindanan. #[SensitiveParameter]

Fungsi yang menerima kata laluan, kunci peribadi atau maklumat sensitif lain boleh menggunakan

untuk menyembunyikan nilai tertentu. Jika ralat atau pengecualian berlaku, nilai yang sepadan akan digantikan dengan objek #[SensitiveParameter]. SensitiveParameterValue

Fungsi terbina dalam PHP seperti

dan password_hash dianotasi dengan parameter password_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) {}
        }
    }
}
Fungsi dan kelas baharu

Menghuraikan kapasiti INI

ini_parse_quantity

ini_parse_quantity('256M'); // 268435456
Kekalkan sambungan CURL

curl_upkeep

PHP 8.2 Fungsi

dalam sambungan Curl mencetuskan perpustakaan Curl yang mendasari untuk menjalankan tugas yang diperlukan untuk memastikan sambungan Curl aktif. Kes penggunaan yang paling biasa untuk fungsi ini adalah untuk mengekalkan sambungan berterusan HTTP (Keep-Alive) dengan memanggil fungsi curl_upkeep secara berkala. curl_upkeep

Dapatkan panjang kunci penyulitan

openssl_cipher_key_length

Dalam PHP 8.2 OpenSSL, terdapat fungsi baharu yang dipanggil

yang mengembalikan kunci yang diperlukan untuk mana-mana Panjang sifir OpenSSL yang disokong dalam bait. openssl_cipher_key_length

Ciri ini menghapuskan keperluan untuk mengeraskan panjang kunci yang diperlukan untuk operasi kriptografi 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 实体编码的处理。

Atas ialah kandungan terperinci PHP 8.2 dikemas kini! Gambaran keseluruhan pantas ciri baharu dalam satu artikel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam