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