Bir yıllık geliştirme sürecinin ardından PHP 8.3 programlama dilinin piyasaya sürülmesi sunuldu. Yeni dal, bir dizi yeni özelliğin yanı sıra uyumluluğu bozan çeşitli değişiklikler içeriyor.
PHP 8.3'teki önemli değişiklikler:
- Sınıf klonlama sırasında özellikleri "salt okunur" özelliğiyle yeniden başlatmak mümkündür. Salt okunur özelliklerin geçersiz kılınmasına yalnızca “__clone” işlevi içinde izin verilir: salt okunur sınıf Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // "createdAt" özelliği salt okunur olmasına rağmen izin veriliyor. } }
- Sınıflarda, özelliklerde ve numaralandırmalarda sabitleri tür göstergesiyle kullanma yeteneği sağlanmıştır: class Foo { const string BAR = 'baz'; }
- Geliştiricinin yorumlayıcıya işaretli yöntemin bazı ana yöntemleri geçersiz kıldığını bildirebileceği "#[Geçersiz Kıl]" özelliği için destek eklendi. Geçersiz kılma yoksa yorumlayıcı bir hata görüntüleyecektir.
- Negatif değerlerin dizi dizini olarak işlenmesi değiştirildi. Örneğin, boş bir diziye “-5” numaralı bir öğe eklerken ve başka bir öğe eklerken, daha önce ikinci öğe “0” dizini ile kaydediliyordu, ancak PHP 8.3 sürümünden itibaren “-4” dizini ile kaydedilecektir. . $dizi = []; $dizi[-5] = 'a'; $dizi[] = 'b'; var_export($dizi); // Dizi oldu (-5 => 'a', 0 => 'b') // Dizi oldu (-5 => 'a', -4 => 'b')
- Salt okunur modda anonim sınıflar oluşturma yeteneği eklendi: $class = new salt okunur class { public function __construct( public string $foo = 'bar', ) {} };
- Kod çözme işlemleri gerçekleştirmeden bir dizenin JSON biçiminde olup olmadığını hızlı bir şekilde kontrol etmek için json_validate() işlevi eklendi. json_validate(string $json, int $derinlik = 512, int $bayraklar = 0): bool
- Sahte rastgele sayılar ve diziler oluşturmak için yüksek düzeyli bir API sağlayan Randomizer sınıfına yeni yöntemler eklenmiştir: başka bir dizede bulunan karakterleri rastgele sırayla kullanarak belirli bir boyutta bir dize oluşturmak için getBytesFromString; getFloat ve nextFloat, belirtilen aralığa giren rastgele bir kayan nokta sayısı oluşturmak için kullanılır.
- Dinamik sınıf sözdizimini kullanarak sabitleri alma yeteneği eklendi: class Foo { const BAR = 'bar'; } $isim = 'BAR'; // Önceden, BAR sabitini almak için sabit(Foo::class . '::' . $isim);'yi çağırmanız gerekiyordu. // Şimdi sadece Foo::{$name};'yi belirtin
- Tarih ve saatle çalışan işlemlerde sorun yaşanması durumunda bireysel istisnaların (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) oluşturulması eklendi.
- unserialize() işlevinde serileştirilmiş verilerin ayrıştırılması sırasında ortaya çıkan hataların iyileştirilmiş yönetimi. Sorun olması durumunda unserialize() artık E_NOTICE yerine E_WARNING yayınlıyor.
- range() işlevinde değişiklikler yapıldı. Aralık sınırlarını tanımlayan değişkenlerdeki nesneleri, kaynakları veya dizileri aktarmaya çalışırken ve ayrıca $step parametresinde negatif bir değer veya herhangi bir parametrede tanımsız bir değer belirtirken bir istisna oluşturulur. Artık sayılar yerine dizeleri belirtirken bir karakter listesi çıktısı alınabiliyor (örneğin, "aralık('5', 'z')").
- Statik özelliklere sahip özelliklerin davranışı değiştirildi; artık üst sınıftan miras alınan statik özellikleri geçersiz kılıyor.
- Yığın taşması koruması için ayarlar eklendi. İzin verilen ve ayrılmış maksimum yığın boyutunu tanımlayan zend.max_allowed_stack_size ve zend.reserved_stack_size yönergeleri ini dosyasına eklendi. Yığın tükenmeye yaklaşıldığında, yığın zend.max_allowed_stack_size ve zend.reserved_stack_size arasındaki farktan daha fazla dolduğunda program çökecektir (bir segmentasyon hatası oluşmadan önce yürütme duracaktır). Varsayılan olarak zend.max_allowed_stack_size değeri 0'a ayarlıdır (0; boyut otomatik olarak belirlenir; sınırlamayı devre dışı bırakmak için -1 olarak ayarlayabilirsiniz).
- Yeni POSIX işlevleri posix_sysconf(), posix_pathconf(), posix_fpathconf() ve posix_eaccess() eklendi.
- UTF-8 gibi çok baytlı kodlamalarla çalışmak üzere tasarlanmış, str_pad() dize işlevinin bir benzeri olan mb_str_pad işlevi eklenmiştir.
- Yöntemlerden kapanışlar oluşturmanıza ve adlandırılmış bağımsız değişkenleri bu kapanışlara aktarmanıza olanak tanır. $test = yeni Test(); $kapatma = $test->sihir(…); $kapatma(a: 'merhaba', b: 'dünya');
- Arayüzlerdeki sabitlerin görünürlüğü ele alınırken davranış değiştirildi. arayüz I { public const FOO = 'foo'; } C sınıfı uygular I { özel const FOO = 'foo'; }
- array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() ve proc_get_status() işlevlerinin yetenekleri genişletildi.
- Negatif bir $widths değerini mb_strimwidth() işlevine aktarma özelliği kullanımdan kaldırıldı. NumberFormatter::TYPE_CURRENCY sabiti kaldırıldı. $Host ve $port olmak üzere iki parametreyle ldap_connect() işlevinin çağrılması desteği durduruldu. opcache.consistency_checks ayarı kaldırıldı.
Kaynak: opennet.ru