Издание на програмски јазик PHP 8.2

По една година развој, беше претставено изданието на програмскиот јазик PHP 8.2. Новата гранка вклучува низа нови функции, како и неколку промени кои ја нарушуваат компатибилноста.

Клучни подобрувања во PHP 8.2:

  • Додадена е способност да се означи класа како само за читање. Својствата во таквите класи може да се постават само еднаш, по што не можат да се променат. Претходно, индивидуалните својства на класата можеа да бидат означени само за читање, но сега можете да го овозможите овој режим за сите својства на класата одеднаш. Специфицирањето на знамето „само за читање“ на ниво на класа, исто така, го блокира динамичкото додавање на својствата во класата. класа само за читање Пост { јавна функција __construct( јавна низа $title, јавен Автор $автор, ) {} } $post = нова објава(/* … */); $post->unknown = 'погрешно'; // Грешка: Не може да се создаде динамична сопственост Објава::$непознат
  • Додадени се посебни типови „true“, „false“ и „null“, кои можат да земат само една валидна вредност и се користат, на пример, за враќање на функција со знаменце за завршување на грешка или празна вредност. Претходно, „true“, „false“ и „null“ можеа да се користат само заедно со други типови (на пример, „string|false“), но сега тие можат да се користат одделно: функција alwaysFalse(): false { return false ; }
  • Обезбедува можност за филтрирање на чувствителни параметри во излезот за следење на оџакот при грешка. Исклучувањето на одредени информации може да биде неопходно кога информациите за грешките што се случуваат автоматски се испраќаат до услуги од трети страни кои ги следат проблемите и ги информираат програмерите за нив. На пример, можете да ги исклучите параметрите што вклучуваат кориснички имиња, лозинки и променливи на околината од следење. функционален тест( $foo, #[\SensitiveParameter] $password, $baz ) {фрли нов Исклучок('Грешка'); } test('foo', 'password', 'baz'); Фатална грешка: Нефатено Исклучок: Грешка во тест.php:8 Трага на оџакот: #0 test.php(11): тест('foo', Object(SensitiveParameterValue), 'baz') #1 {main} фрлена во test.php на линија 8
  • Дозволено е да се дефинираат константи во карактеристиките (особина, механизам за повторна употреба на код). До константите дефинирани во особина може да се пристапи преку класата што ја користи карактеристиката (но не преку името на особината). особина Foo { public const CONSTANT = 1; јавна функција лента(): int { return self::CONSTANT; // Фатална грешка } } class Bar { use Foo; } var_dump(Бар::КОНСТАНТ); // 1
  • Додадена е можност за одредување типови во дисјунктивна нормална форма (DNF, дисјунктивна нормална форма), што ви овозможува да комбинирате унија на типови (збирки од два или повеќе типа) и пресек на типови (типови чии вредности спаѓаат под неколку типови истовремено). class Foo { јавна лента со функции((A&B)|null $entity) { if ($entity === null) { return null; } врати $ентитет; } }
  • Предложено е ново проширување „Случајно“ со функции и класи за генерирање на псевдослучајни броеви и секвенци. Модулот обезбедува објектно-ориентиран интерфејс, ви овозможува да изберете различни мотори за генерирање на псевдо-случајни броеви, вклучително и оние што се погодни за употреба во криптографијата, и обезбедува помошни функции, на пример, за случајно мешање низи и низи, избирање клучеви со случајни низи, истовремена употреба на неколку генератори со сопствена независна држава. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = нов Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Спроведена конверзија на случај независна од локација. Функциите како strtolower() и strtoupper() сега секогаш ги конвертираат буквите на знаците во опсегот ASCII како да се поставени на локацијата „C“.
  • Додадени се нови функции: 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}“ и ${(var)} е застарена. Поддршката за најчесто користените замени „{$var}“ и „$var“ е задржана. На пример: "Здраво {$world}"; OK "Здраво $world"; OK "Здраво ${world}"; Застарено: Користењето на ${} во низи е застарено
  • Застарени делумно поддржани повикувачи кои може да се повикаат преку „call_user_func($callable)“, но не поддржуваат повикување во форма на „$callable()“: „self::method“ „parent::method“ „static“ ::method " ["себе", "метод"] ["родител", "метод"] ["статички", "метод"] ["Foo", "Bar::method"] [new Foo, "Bar: :method" ]
  • Директивата error_log_mode е додадена во поставките, што ви овозможува да го одредите режимот на пристап до дневникот за грешки.

Извор: opennet.ru

Додадете коментар