PHP 8.2 programlama dilinin piyasaya sürülmesi

Bir yıllık geliştirme sürecinin ardından PHP 8.2 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.2'deki önemli iyileştirmeler:

  • Bir sınıfı salt okunur olarak işaretleme özelliği eklendi. Bu tür sınıflardaki özellikler yalnızca bir kez ayarlanabilir, sonrasında değiştirilemez. Önceden, bireysel sınıf özellikleri salt okunur olarak işaretlenebiliyordu, ancak artık bu modu tüm sınıf özellikleri için aynı anda etkinleştirebilirsiniz. Sınıf düzeyinde "salt okunur" bayrağının belirtilmesi aynı zamanda özelliklerin sınıfa dinamik olarak eklenmesini de engeller. salt okunur sınıf Gönderi { public function __construct( public string $başlık, public Yazar $yazar, ) {} } $yazı = yeni Gönderi(/* … */); $post->unknown = 'yanlış'; // Hata: Dinamik özellik oluşturulamıyor Post::$unknown
  • Добавлены отдельные типы «true», «false» и «null», которые могут принимать только одно допустимое значение и использоваться, например, для возвращения функцией признака завершения с ошибкой или пустого значения. Ранее «true», «false» и «null» могли использоваться только в связке с другими типами (например, «string|false»), а теперь могут применяться отдельно: function alwaysFalse(): false { return false; }
  • Bir hata sırasında yığın izleme çıkışındaki hassas parametreleri filtreleme yeteneği sağlar. Ortaya çıkan hatalarla ilgili bilgiler, sorunları takip eden ve geliştiricileri bunlar hakkında bilgilendiren üçüncü taraf hizmetlere otomatik olarak gönderildiğinde belirli bilgilerin kesilmesi gerekebilir. Örneğin, kullanıcı adlarını, parolaları ve ortam değişkenlerini içeren parametreleri izlemenin dışında bırakabilirsiniz. function test( $foo, #[\SensitiveParameter] $şifre, $baz ) { throw new Exception('Error'); } test('foo', 'şifre', 'baz'); Önemli hata: Yakalanmayan İstisna: test.php:8'de hata Yığın izleme: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} test.php'ye atıldı 8. hatta
  • Разрешено определение констант в типажах (trait, механизм для повторного использования кода). Доступ к константам, определённым в типаже, можно получить через класс, который использует типаж (но не через имя типажа). trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Добавлена возможность задания типов в дизъюнктивной нормальной форме (DNF, Disjunctive Normal Form), позволяющей совместить объединение типов (коллекции из двух и более типов) и пересечение типов (типы, значения которых подпадают одновременно под несколько типов). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; } }
  • Предложено новое расширение «Random» c функциями и классами для генерации псеводослучайных чисел и последовательностей. Модуль предоставляет объектно-ориентированный интерфейс, позволяет выбирать разные движки для генерации псеводослучайных чисел, в том числе пригодные для применения в криптографии, и предоставляет вспомогательные функции, например, для случайного перемешивания массивов и строк, выбора случайных ключей массива, одновременного использования нескольких генераторов со своим независимым состоянием. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString(‘foobar’);
  • Yerel ayardan bağımsız büyük/küçük harf dönüşümü uygulandı. strtolower() ve strtoupper() gibi işlevler artık her zaman ASCII aralığındaki karakterlerin büyük/küçük harflerini sanki "C" yerel ayarına ayarlanmış gibi dönüştürüyor.
  • Добавлены новые функции: 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.
  • Добавлены новые методы: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Объявлена устаревшей возможность динамического создания свойств в классе. В PHP 9.0 обращение к свойствам, изначально не определённым в классе, будет приводить к ошибке (ErrorException). Классы, предоставляющие методы __get и __set для создания свойств, или динамические свойства в stdClass продолжат работать без изменений, прекратится поддержка только неявной работы с несуществующими свойствами для того чтобы защитить разработчика от скрытых ошибок. Для сохранения работы старого кода предложен атрибут «#[AllowDynamicProperties]», разрешающий использование динамических свойств.
  • "${var}" ve ${(var)} ifadelerini kullanarak değişken değerlerini dizelere yerleştirme özelliği kullanımdan kaldırıldı. Yaygın olarak kullanılan "{$var}" ve "$var" ikamelerine yönelik destek korundu. Örneğin: "Merhaba {$world}"; Tamam "Merhaba $dünya"; Tamam "Merhaba ${world}"; Kullanımdan kaldırıldı: Dizelerde ${} kullanımı artık kullanımdan kaldırıldı
  • "Call_user_func($callable)" yoluyla çağrılabilen ancak "$callable()" biçiminde çağrıyı desteklemeyen, kısmen desteklenen çağrılabilir öğeler kullanımdan kaldırıldı: "self::method" "parent::method" "static" ::method " ["kendi", "yöntem"] ["üst", "yöntem"] ["statik", "yöntem"] ["Foo", "Bar::yöntem"] [yeni Foo, "Bar: :yöntem" ]
  • В настройки добавлена директива error_log_mode, позволяющая определить режим доступа к логу с ошибками.

Kaynak: opennet.ru

Yorum ekle