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

Bir illik inkişafdan sonra PHP 8.3 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.3-də əsas dəyişikliklər:

  • Sinif klonlama zamanı xassələri “yalnız oxunmaq” atributu ilə yenidən işə salmaq mümkündür. Yalnız oxunan xassələrin ləğvinə yalnız “__clone” funksiyası daxilində icazə verilir: yalnız oxumaq üçün sinif Post { ictimai funksiya __construct( ictimai DateTime $createdAt, ) {} ictimai funksiya __clone() { $this->createdAt = new DateTime(); // "createdAt" xassəsinin yalnız oxunmasına baxmayaraq icazə verilir. } }
  • Siniflərdə, əlamətlərdə və sadalamalarda tip göstəricisi olan sabitlərdən istifadə etmək imkanı təmin edilmişdir: class Foo { const string BAR = 'baz'; }
  • “#[Override]” atributuna dəstək əlavə edildi, onun köməyi ilə tərtibatçı tərcüməçiyə işarələnmiş metodun bəzi əsas metodu ləğv etdiyi barədə məlumat verə bilər. Əgər ləğv edilməzsə, tərcüməçi səhv göstərəcək.
  • Mənfi dəyərlərin massiv indeksi kimi işlənməsi dəyişdirildi. Məsələn, boş massivə “-5” nömrəli element əlavə edilərkən və başqa element əlavə edilərkən əvvəllər ikinci element “0” indeksi ilə yadda saxlanılırdı, lakin PHP 8.3 versiyasından başlayaraq “-4” indeksi ilə yadda saxlanılacaq. . $massiv = []; $massiv[-5] = 'a'; $array[] = 'b'; var_export($massiv); // Massiv oldu (-5 => 'a', 0 => 'b') // massiv oldu (-5 => 'a', -4 => 'b')
  • Yalnız oxumaq rejimində anonim siniflər yaratmaq imkanı əlavə edildi: $class = newly readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Kod açma əməliyyatlarını yerinə yetirmədən sətrin JSON formatında olub-olmadığını tez yoxlamaq üçün json_validate() funksiyası əlavə edildi. json_validate(string $json, int $dərinlik = 512, int $bayraqlar = 0): bool
  • Yalançı təsadüfi ədədlər və ardıcıllıqlar yaratmaq üçün yüksək səviyyəli API təmin edən Randomizer sinfinə yeni üsullar əlavə edilmişdir: getBytesFromString başqa sətirdə mövcud olan simvollardan təsadüfi qaydada istifadə edərək verilmiş ölçülü sətir yaratmaq üçün; getFloat və nextFloat müəyyən diapazona düşən təsadüfi üzən nöqtə nömrəsi yaratmaq üçün.
  • Dinamik sinif sintaksisindən istifadə edərək sabitləri əldə etmək imkanı əlavə edildi: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Əvvəllər BAR sabitini əldə etmək üçün siz konstanta zəng etməli idiniz(Foo::class . '::' . $name); // İndi sadəcə təyin edin Foo::{$name};
  • Tarix və vaxtla işləyən əməliyyatlarda yaranan problemlər zamanı fərdi istisnaların (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) generasiyası əlavə edildi.
  • unserialize() funksiyasında seriallaşdırılmış məlumatların təhlili zamanı baş verən səhvlərin təkmilləşdirilmiş idarə edilməsi. Problemlər olduqda, unserialize() indi E_NOTICE əvəzinə E_WARNING verir.
  • range() funksiyasında dəyişikliklər edilib. İstisna diapazon sərhədlərini müəyyən edən dəyişənlərdə obyektləri, resursları və ya massivləri ötürməyə cəhd edərkən, həmçinin $step parametrində mənfi dəyər və ya hər hansı parametrdə qeyri-müəyyən dəyər təyin edərkən yaradılır. Rəqəmlərin əvəzinə sətirlər göstərildikdə simvolların siyahısı indi çıxarıla bilər (məsələn, “aralıq('5', 'z')").
  • İndi ana sinifdən miras qalmış statik xassələri ləğv edən statik xassələri olan əlamətlərin davranışı dəyişdirildi.
  • Yığın daşmasından qorunmaq üçün əlavə parametrlər. ini faylına zend.max_allowed_stack_size və zend.reserved_stack_size direktivləri əlavə edilib, maksimum icazə verilən və qorunan yığın ölçüsünü müəyyən edir. Yığın tükənməsinə yaxınlaşdıqda, yığın zend.max_allowed_stack_size və zend.reserved_stack_size arasındakı fərqdən çox dolduqda proqram qəzaya uğrayacaq (seqmentasiya xətası baş verməzdən əvvəl icra dayandırılacaq). Varsayılan olaraq, zend.max_allowed_stack_size dəyəri 0-a təyin edilir (0—ölçü avtomatik olaraq müəyyən edilir; məhdudiyyəti aradan qaldırmaq üçün onu -1-ə təyin edə bilərsiniz).
  • Yeni POSIX funksiyaları əlavə edildi posix_sysconf(), posix_pathconf(), posix_fpathconf() və posix_eaccess().
  • UTF-8 kimi çox baytlı kodlaşdırmalarla işləmək üçün nəzərdə tutulmuş str_pad() sətir funksiyasının analoqu olan mb_str_pad funksiyası əlavə edilmişdir.
  • Metodlardan qapanmalar yaratmağa və həmin qapanmalara adlı arqumentləri ötürməyə imkan verir. $test = yeni Test(); $bağlanma = $test->sehrli(...); $bağlama(a: 'salam', b: 'dünya');
  • İnterfeyslərdə sabitlərin görünməsini idarə edərkən davranış dəyişdi. interfeys I { public const FOO = 'foo'; } sinif C tətbiq edir I { private const FOO = 'foo'; }
  • array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() və proc_get_status() funksiyalarının imkanları genişləndirilmişdir.
  • Mənfi $widths dəyərini mb_strimwidth()-ə ötürmək imkanı köhnəlib. NumberFormatter::TYPE_CURRENCY sabiti silindi. $host və $port iki parametrli ldap_connect() funksiyasına zəng etmək üçün dəstək dayandırıldı. opcache.consistency_checks parametri silindi.

Mənbə: opennet.ru

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