PHP 8.3 programlama dilinin piyasaya sürülmesi

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

Yorum ekle