PHP 8.1 ప్రోగ్రామింగ్ లాంగ్వేజ్ విడుదల

ఒక సంవత్సరం అభివృద్ధి తర్వాత, PHP 8.1 ప్రోగ్రామింగ్ భాష విడుదల చేయబడింది. కొత్త బ్రాంచ్‌లో కొత్త ఫీచర్ల శ్రేణి, అలాగే అనుకూలతను విచ్ఛిన్నం చేసే అనేక మార్పులు ఉన్నాయి.

PHP 8.1లో కీలక మెరుగుదలలు:

  • గణనలకు మద్దతు జోడించబడింది, ఉదాహరణకు, మీరు ఇప్పుడు క్రింది నిర్మాణాలను ఉపయోగించవచ్చు: enum స్థితి {కేసు పెండింగ్‌లో ఉంది; కేసు యాక్టివ్; కేసు ఆర్కైవ్ చేయబడింది; } తరగతి పోస్ట్ {పబ్లిక్ ఫంక్షన్ __నిర్మాణం(ప్రైవేట్ స్టేటస్ $స్టేటస్ = స్టేటస్::పెండింగ్;) {} పబ్లిక్ ఫంక్షన్ సెట్‌స్టేటస్(స్టేటస్ $స్టేటస్): శూన్యం {//…}} $పోస్ట్->సెట్‌స్టేటస్(స్టేటస్::యాక్టివ్);
  • Добавлена поддержка легковесных потоков, именуемых файберами (Fiber) и позволяющими управлять потоками выполнения на низком уровне. Поддержку файберов планируется добавить во фреймворки Amphp и ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend(‘after suspending’); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume(‘after resuming’);
  • Улучшена реализация кэша объектного кода (opcache), в которой появилась возможность кэширования информации о наследовании классов. Оптимизация позволила поднять производительность некоторых приложений на 5-8%. Из других оптимизаций отмечается оптимизация работы JIT, реализация поддержки JIT для архитектуры ARM64 (AArch64), ускорение разрешения имён, оптимизация библиотек timelib и ext/date, повышение производительности сериализации и десериализации, оптимизация функция get_declared_classes(), explode(), strtr(), strnatcmp(), dechex(). В общем виде отмечается повышение производительности Symfony Demo на 23.0%, а WordPress на 3.5%.
  • కొత్త శ్రేణిని నిర్వచించేటప్పుడు ఇప్పటికే ఉన్న శ్రేణుల ప్రత్యామ్నాయాన్ని అనుమతించే "...$var" శ్రేణుల లోపల అన్‌ప్యాకింగ్ ఆపరేటర్, స్ట్రింగ్ కీలకు మద్దతు ఇవ్వడానికి విస్తరించబడింది (గతంలో డిజిటల్ ఐడెంటిఫైయర్‌లకు మాత్రమే మద్దతు ఉంది). ఉదాహరణకు, మీరు ఇప్పుడు కోడ్‌లో ఉపయోగించవచ్చు: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump ($ అర్రే); // ["a" => 1, "b" => 2]
  • Разрешено использовать ключевое слово «new» в инициализаторах, например, в определениях функций в качестве параметра по умолчанию или в атрибутах аргуметов. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Предоставлена возможность пометки свойств класса для доступа только для чтения (информация в подобные свойства может быть записана только один раз, после чего не будет доступна для изменения). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post(‘Title’, /* … */); $post->title = ‘Other’; > Error: Cannot modify readonly property Post::$title
  • Реализован новый синтаксис для вызываемых объектов (callable) — замыкание теперь можно сформировать, вызвав функцию и передав ей в качестве аргумента значение «…» (т.е. myFunc(…) вместо Closure::fromCallable(‘myFunc’)): function foo(int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Добавлена полноценная поддержка пересекающихся типов (intersection types), позволяющих создавать новые типы, комбинируя существующие. В отличие от union-типов, определяющих коллекции из двух и более типов, intersection-типы требуют наличия в заполняемом множестве не любого из перечисленных типов, а всех указанных типов. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • ఒక ఫంక్షన్ ప్రోగ్రామ్ ఎగ్జిక్యూషన్‌ను రద్దు చేస్తుందని స్టాటిక్ ఎనలైజర్‌లకు తెలియజేయడానికి "నెవర్" అనే కొత్త రకం ఉంది, ఉదాహరణకు మినహాయింపును విసిరివేయడం లేదా నిష్క్రమణ ఫంక్షన్‌ని అమలు చేయడం ద్వారా. ఫంక్షన్ dd(మిశ్రమ $ఇన్‌పుట్): ఎప్పుడూ {నిష్క్రమించవద్దు; }
  • array_is_list అనే కొత్త ఫంక్షన్ ప్రతిపాదించబడింది, ఇది 0: $list = [“a”, “b”, “c”] నుండి ప్రారంభమయ్యే సంఖ్యా విలువలను పెంచే క్రమంలో శ్రేణిలోని కీలు అమర్చబడి ఉన్నాయని నిర్ధారించడానికి మిమ్మల్ని అనుమతిస్తుంది; array_is_list($list); // నిజమైన $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // తప్పుడు $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // తప్పు
  • Для запрета переопределения констант родительского класса теперь можно использовать ключевое слово «final». class Foo { final public const X = «foo»; } class Bar extends Foo { public const X = «bar»; > Fatal error: Bar::X cannot override final constant Foo::X }
  • fsync మరియు fdatasync ఫంక్షన్‌లు డిస్క్ కాష్ నుండి మార్పులను సేవ్ చేయమని బలవంతంగా ప్రతిపాదించబడ్డాయి. $file = fopen("sample.txt", "w"); fwrite($file, "కొంత కంటెంట్"); if (fsync($file)) {echo "ఫైల్ డిస్క్‌కి విజయవంతంగా కొనసాగించబడింది."; } fclose($file);
  • గతంలో ఉపయోగించిన "0" ఉపసర్గతో పాటు, అష్ట సంఖ్యల కోసం "0o" మరియు "0O" ఉపసర్గలను ఉపయోగించగల సామర్థ్యం జోడించబడింది. 016 === 0o16; // నిజమైన 016 === 0O16; // నిజం
  • $GLOBALS వినియోగాన్ని ఎంపికగా పరిమితం చేయాలని ప్రతిపాదించబడింది, ఇది వెనుకబడిన అనుకూలత ఉల్లంఘనకు దారి తీస్తుంది, కానీ శ్రేణులతో కార్యకలాపాలను గణనీయంగా వేగవంతం చేయడం సాధ్యపడుతుంది. ఉదాహరణకు, $GLOBALSకి వ్రాయడం నిలిపివేయడం మరియు పాయింటర్ ద్వారా $GLOBALSని పాస్ చేసే అవకాశం పరిగణించబడుతోంది. 2000 ప్యాకేజీల విశ్లేషణలో కేవలం 23 ప్యాకేజీలు మాత్రమే ఈ మార్పు ద్వారా ప్రభావితమవుతాయని తేలింది. ఉదాహరణకు, ప్రతిపాదన ఆమోదించబడినట్లయితే, 8.1 ఇకపై అటువంటి వ్యక్తీకరణలకు మద్దతు ఇవ్వదు: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; అన్‌సెట్ ($GLOBALS); by_ref($GLOBALS);
  • Внутренние методы теперь должны возвращать корректный тип. В PHP 8.1 при возвращении типа, не соответствующего объявлению функции, будут выводиться предупреждение, но в PHP 9.0 предупреждение будет заменено на ошибку.
  • వనరులను ఉపయోగించడం నుండి వస్తువులను మార్చడం వరకు విధులను బదిలీ చేయడంపై పని కొనసాగింది. finfo_* మరియు imap_* ఫంక్షన్‌లు ఆబ్జెక్ట్‌లకు బదిలీ చేయబడ్డాయి.
  • శూన్యత లేనిదిగా గుర్తించబడిన అంతర్గత ఫంక్షన్‌లకు ఆర్గ్యుమెంట్‌లుగా శూన్య విలువలను పాస్ చేయడం నిలిపివేయబడింది. PHP 8.1లో, str_contains("string", null) వంటి నిర్మాణాలను ఉపయోగించడం హెచ్చరికకు దారి తీస్తుంది మరియు PHP 9లో లోపానికి దారి తీస్తుంది.
  • MurmurHash3 మరియు xxHash హ్యాషింగ్ అల్గారిథమ్‌లకు మద్దతు జోడించబడింది.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి