PHP 8.2 proqramlaşdırma dili buraxılışı

Bir illik inkişafdan sonra PHP 8.2 proqramlaşdırma dilinin buraxılışı təqdim olundu. Yeni filiala bir sıra yeni funksiyalar, eləcə də uyğunluğu pozan bir neçə dəyişiklik daxildir.

PHP 8.2-də əsas təkmilləşdirmələr:

  • Bir sinfi yalnız oxumaq üçün qeyd etmək imkanı əlavə edildi. Belə siniflərdə olan xassələr yalnız bir dəfə təyin edilə bilər, bundan sonra onlar dəyişdirilə bilməz. Əvvəllər fərdi sinif xassələri yalnız oxunmaq üçün qeyd oluna bilərdi, lakin indi siz bu rejimi bütün sinif xüsusiyyətləri üçün bir anda yandıra bilərsiniz. Sinif səviyyəsində "yalnız oxumaq" bayrağının təyin edilməsi xassələrin sinfə dinamik əlavə edilməsini də bloklayır. yalnız oxunan sinif Post { ictimai funksiya __construct( ictimai sətir $title, ictimai Müəllif $author, ) {} } $post = new Post(/* … */); $post->naməlum = 'səhv'; // Xəta: Dinamik xüsusiyyət yaratmaq mümkün deyil Post::$naməlum
  • Yalnız bir etibarlı dəyər götürə bilən və məsələn, xətanın dayandırılması bayrağı və ya boş dəyər olan funksiyanı qaytarmaq üçün istifadə olunan "doğru", "yanlış" və "null" ayrıca növləri əlavə edildi. Əvvəllər “true”, “false” və “null” yalnız digər növlərlə birlikdə istifadə edilə bilərdi (məsələn, “string|false”), indi isə onlar ayrıca istifadə edilə bilər: function alwaysFalse(): false { return false ; }
  • Səhv anında yığın izi çıxışında həssas parametrləri süzgəcdən keçirmək imkanı təmin edilmişdir. Baş verən səhvlər haqqında məlumat avtomatik olaraq problemləri izləyən və onlar haqqında tərtibatçıları məlumatlandıran üçüncü tərəf xidmətlərinə göndərildikdə müəyyən məlumatların kəsilməsi tələb oluna bilər. Məsələn, istifadəçi adları, parollar və mühit dəyişənləri daxil olan parametrləri izdən xaric edə bilərsiniz. funksiya testi( $foo, #[\SensitiveParameter] $parol, $baz ) { yeni İstisna ('Xəta') atmaq; } test('foo', 'parol', 'baz'); Fatal səhv: Tutulmamış İstisna: test.php-də xəta:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} test.php-də atıldı onlayn 8
  • Xüsusiyyətlərdə sabitləri təyin etməyə icazə verilir (xüsusiyyət, kodun təkrar istifadəsi mexanizmi). Xüsusiyyətdə müəyyən edilmiş sabitlərə əlamətdən istifadə edən sinif vasitəsilə daxil olmaq olar (lakin əlamət adı ilə deyil). trait Foo { public const CONSTANT = 1; ictimai funksiya bar(): int { özünü qaytarın::CONSTANT; // Fatal xəta } } class Bar { Foo-dan istifadə edin; } var_dump(Bar::CONSTANT); // 1
  • Tiplərin birləşməsini (iki və ya daha çox növün kolleksiyaları) və növlərin kəsişməsini (qiymətləri bir neçə növün altına düşən növlər) birləşdirməyə imkan verən disjunktiv normal formada növləri müəyyən etmək imkanı əlavə edildi (DNF, Disjunctive Normal Forma). növləri eyni vaxtda). class Foo { ictimai funksiya bar((A&B)|null $entity) { if ($entity === null) { qaytarılması null; } $entity qaytarın; } }
  • Pseudo-təsadüfi ədədlər və ardıcıllıqlar yaratmaq üçün funksiyaları və sinifləri olan yeni "Random" genişlənməsi təklif edilmişdir. Modul obyekt yönümlü interfeys təqdim edir, kriptoqrafiyada istifadə üçün uyğun olanlar da daxil olmaqla psevdo-təsadüfi nömrələr yaratmaq üçün müxtəlif mühərrikləri seçməyə imkan verir və köməkçi funksiyaları təmin edir, məsələn, massivləri və sətirləri təsadüfi qarışdırmaq, təsadüfi massiv düymələrini seçmək, öz müstəqil dövlətinizlə bir neçə generatorun eyni vaxtda istifadəsi. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = yeni Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Yerdən müstəqil halda konvertasiya həyata keçirilib. strtolower() və strtoupper() kimi funksiyalar indi həmişə ASCII diapazonunda olan simvolların registrini, yerli dili "C"-yə təyin edərkən olduğu kimi çevirir.
  • Yeni funksiyalar əlavə edildi: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Yeni üsullar əlavə edildi: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Sinifdə xassələri dinamik şəkildə yaratmaq imkanı ləğv edilib. PHP 9.0-da sinifdə ilkin olaraq təyin olunmayan xassələrə daxil olmaq xəta ilə nəticələnəcək (ErrorException). Xassələrin yaradılması üçün __get və __set metodlarını və ya stdClass-da dinamik xassələri təmin edən siniflər dəyişikliksiz işləməyə davam edəcək, tərtibatçını gizli səhvlərdən qorumaq üçün yalnız mövcud olmayan xassələrlə gizli iş dəstəklənəcək. Köhnə kodun işini qorumaq üçün dinamik xüsusiyyətlərin istifadəsinə imkan verən “#[AllowDynamicProperties]” atributu təklif olunur.
  • "${var}" və ${(var)}" ifadələrindən istifadə edərək dəyişən dəyərləri sətirlərə əvəz etmək imkanı ləğv edilib. Tez-tez istifadə olunan "{$var}" və "$var" əvəzetmələri üçün dəstək saxlanılıb. Məsələn: "Salam {$world}"; OK "Salam $world"; OK "Salam ${world}"; Köhnəlmişdir: Sətirlərdə ${} istifadə köhnəlmişdir
  • "call_user_func($callable)" vasitəsilə çağırıla bilən qismən dəstəklənən zənglər köhnəlib, lakin "$callable()": "self::method" "parent::method" "static ::" şəklində zəng etməyi dəstəkləmir. metod" ["self", "metod"] ["valideyn", "metod"] ["statik", "metod"] ["Foo", "Bar::method"] [yeni Foo, "Bar: :method" "]
  • Səhv jurnalına giriş rejimini təyin etməyə imkan verən error_log_mode direktivi parametrlərə əlavə edilmişdir.

Mənbə: opennet.ru

Добавить комментарий