Izdanje PHP 8.2 programskog jezika

Nakon godinu dana razvoja, predstavljeno je izdanje programskog jezika PHP 8.2. Nova grana uključuje niz novih funkcija, kao i nekoliko promjena koje narušavaju kompatibilnost.

Ključna poboljšanja u PHP 8.2:

  • Dodata mogućnost označavanja klase kao samo za čitanje. Svojstva u takvim klasama mogu se postaviti samo jednom, nakon čega se ne mogu mijenjati. Ranije su pojedinačna svojstva klase mogla biti označena samo za čitanje, ali sada možete omogućiti ovaj način za sva svojstva klase odjednom. Određivanje oznake "samo za čitanje" na razini klase također blokira dinamičko dodavanje svojstava u klasu. klasa samo za čitanje Objava { javna funkcija __construct( javni string $title, javni autor $author, ) {} } $post = nova objava(/* … */); $post->unknown = 'pogrešno'; // Greška: Nije moguće kreirati dinamičko svojstvo Post::$unknown
  • Добавлены отдельные типы «true», «false» и «null», которые могут принимать только одно допустимое значение и использоваться, например, для возвращения функцией признака завершения с ошибкой или пустого значения. Ранее «true», «false» и «null» могли использоваться только в связке с другими типами (например, «string|false»), а теперь могут применяться отдельно: function alwaysFalse(): false { return false; }
  • Pruža mogućnost filtriranja osjetljivih parametara u izlazu praćenja steka za vrijeme greške. Izrezivanje određenih informacija može biti neophodno kada se informacije o greškama koje se javljaju automatski šalju uslugama trećih strana koje prate probleme i obaveštavaju programere o njima. Na primjer, možete isključiti parametre koji uključuju korisnička imena, lozinke i varijable okruženja iz praćenja. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Fatalna greška: Neuhvaćen izuzetak: Greška u test.php:8 Praćenje steka: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} bačeno u test.php na liniji 8
  • Разрешено определение констант в типажах (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’);
  • Implementirana konverzija velikih i malih slova neovisna o lokalizaciji. Funkcije kao što su strtolower() i strtoupper() sada uvijek pretvaraju velika i mala slova znakova u ASCII opsegu kao da su postavljene na "C" lokalizaciju.
  • Добавлены новые функции: 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]», разрешающий использование динамических свойств.
  • Mogućnost zamjene vrijednosti varijabli u nizove pomoću izraza "${var}" i ${(var)} je zastarjela. Podrška za često korištene zamjene "{$var}" i "$var" je zadržana. Na primjer: "Zdravo {$world}"; OK "Hello $world"; OK "Zdravo ${world}"; Zastarjelo: Upotreba ${} u nizovima je zastarjela
  • Zastarjeli djelomično podržani pozivi koji se mogu pozvati putem "call_user_func($callable)", ali ne podržavaju pozivanje u obliku "$callable()": "self::method" "parent::method" "static" ::method " ["self", "method"] ["roditelj", "method"] ["static", "method"] ["Foo", "Bar::method"] [novi Foo, "Bar: :method" ]
  • В настройки добавлена директива error_log_mode, позволяющая определить режим доступа к логу с ошибками.

izvor: opennet.ru

Dodajte komentar