PHP 8.1 ක්‍රමලේඛන භාෂා නිකුතුව

වසරක සංවර්ධනයෙන් පසු, PHP 8.1 ක්‍රමලේඛන භාෂාව නිකුතුව ඉදිරිපත් කරන ලදී. නව ශාඛාවේ නව විශේෂාංග මාලාවක් මෙන්ම ගැළපුම බිඳ දමන වෙනස්කම් කිහිපයක් ද ඇතුළත් වේ.

PHP 8.1 හි ප්‍රධාන වැඩිදියුණු කිරීම්:

  • ගණනය කිරීම් සඳහා සහය එක් කරන ලදි, උදාහරණයක් ලෙස, ඔබට දැන් පහත ඉදිකිරීම් භාවිතා කළ හැක: enum තත්ත්‍වය { නඩුව පොරොත්තුවෙන්; නඩුව ක්රියාකාරී; නඩුව සංරක්ෂණය කර ඇත; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(තත්ත්වය $status): void { // … }} $post->setStatus(තත්ත්වය:: Active);
  • ෆයිබර්ස් නම් සැහැල්ලු නූල් සඳහා සහය එක් කරන ලද අතර, එමඟින් ඔබට ක්‍රියාත්මක කිරීමේ නූල් අඩු මට්ටමකින් කළමනාකරණය කිරීමට ඉඩ සලසයි. Amphp සහ ReactPHP රාමු වලට තන්තු සහය එක් කිරීමට සැලසුම් කර ඇත. $fiber = නව තන්තු(ක්‍රියාකාරීත්වය (): void {$valueAfterResuming = Fiber::suspend('අත්හිටුවීමෙන් පසු'); // ...}); $valueAfterSuspending = $fiber->ආරම්භය(); $fiber->resume('නැවත ආරම්භ කිරීමෙන් පසු');
  • වස්තු කේත හැඹිලි (opcache) ක්‍රියාත්මක කිරීම වැඩිදියුණු කර ඇති අතර, පන්ති උරුමය පිළිබඳ තොරතුරු හැඹිලිගත කිරීමට හැකි වේ. ප්‍රශස්තිකරණය මඟින් සමහර යෙදුම්වල ක්‍රියාකාරිත්වය 5-8% කින් වැඩි කිරීමට හැකි විය. අනෙකුත් ප්‍රශස්තකරණයන් අතරට JIT ක්‍රියාකාරිත්වය ප්‍රශස්ත කිරීම, ARM64 ගෘහ නිර්මාණ ශිල්පය සඳහා JIT සහාය ක්‍රියාත්මක කිරීම (AArch64), නාම විභේදනය වේගවත් කිරීම, timelib සහ ext/date libraries ප්‍රශස්ත කිරීම, අනුක්‍රමිකකරණය සහ deserialization කාර්ය සාධනය වැඩි කිරීම, get_declared_classes (), explode() , strtr() ශ්‍රිතය, strnatcmp(), dechex(). සාමාන්‍යයෙන්, Symfony Demo සඳහා කාර්ය සාධනයේ 23.0% වැඩි වීමක් සහ වර්ඩ්ප්‍රෙස් සඳහා 3.5%.
  • නව අරාවක් නිර්වචනය කිරීමේදී පවතින අරා ආදේශ කිරීමට ඉඩ සලසන "...$var" අරා තුළ ඇති අසුරන ක්‍රියාකරු, ආධාරක තන්තු යතුරු සඳහා දිගු කර ඇත (මීට පෙර ඩිජිටල් හඳුනාගැනීම් සඳහා පමණක් සහාය දක්වන ලදී). උදාහරණයක් ලෙස, ඔබට දැන් කේතය භාවිතා කළ හැක: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump ($ අරාව); // ["a" => 1, "b" => 2]
  • පෙරනිමි පරාමිතියක් ලෙස ක්‍රියාකාරී නිර්වචනවල හෝ තර්ක ගුණාංගවල වැනි ආරම්භක වලදී "නව" මූල පදය භාවිතා කිරීමට අවසර ඇත. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {}}
  • කියවීමට පමණක් ප්‍රවේශය සඳහා පන්ති ගුණාංග සලකුණු කළ හැකිය (එවැනි ගුණාංගවල තොරතුරු ලිවිය හැක්කේ එක් වරක් පමණි, ඉන්පසු එය වෙනස් කිරීම සඳහා ලබා ගත නොහැක). පන්තියේ PostData { public function __construct ( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('මාතෘකාව', /* … */); $post->title = 'වෙනත්'; > දෝෂය: කියවීමට පමණක් දේපල වෙනස් කළ නොහැක Post::$title
  • ඇමතීමට හැකි වස්තු සඳහා නව වාක්‍ය ඛණ්ඩයක් ක්‍රියාත්මක කර ඇත - දැන් ශ්‍රිතයක් අමතා "..." අගය තර්කයක් ලෙස (එනම් myFunc(...) වසා දැමීම වෙනුවට::fromCallable('myFunc) යැවීමෙන් වසා දැමීමක් සෑදිය හැක. ')): ශ්‍රිතය foo (int $a, int $b) { /* … */} $foo = foo(...); $foo(a: 1, b: 2);
  • ඡේදනය වන වර්ග සඳහා සම්පූර්ණ සහය එක් කරන ලද අතර, පවතින ඒවා ඒකාබද්ධ කිරීමෙන් නව වර්ග නිර්මාණය කිරීමට ඔබට ඉඩ සලසයි. වර්ග දෙකක හෝ වැඩි ගණනක එකතු කිරීම් නිර්වචනය කරන යුනියන් වර්ග මෙන් නොව, ඡේදනය වීමේ වර්ග සඳහා ලැයිස්තුගත වර්ග කිසිවක් නොතිබීම අවශ්‍ය වේ, නමුත් කට්ටලයේ සඳහන් කර ඇති සියලුම වර්ග පිරවිය යුතුය. ශ්‍රිතය ජනනය කරන්නSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • ක්‍රමලේඛ ක්‍රියාත්මක කිරීම ශ්‍රිතයක් විසින් අවසන් කරන බව ස්ථිතික විශ්ලේෂකයන්ට දැනුම් දීමට භාවිතා කළ හැකි "කිසිදා" නව වර්ගයක් ඇත, උදාහරණයක් ලෙස ව්‍යතිරේකයක් විසි කිරීම හෝ පිටවීමේ ශ්‍රිතය ක්‍රියාත්මක කිරීම. ශ්‍රිතය dd(මිශ්‍ර $ආදානය): කිසිදා {පිටවීම; }
  • නව ශ්‍රිතයක් array_is_list යෝජනා කර ඇති අතර, එය 0: $list = [“a”, “b”, “c”] සිට ආරම්භ වන සංඛ්‍යාත්මක අගයන් වැඩි වන අනුපිළිවෙලට අරාවෙහි යතුරු සකස් කර ඇති බව තීරණය කිරීමට ඔබට ඉඩ සලසයි; array_is_list($list); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // බොරු $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); //බොරු
  • ඔබට දැන් "අවසාන" මූල පදය භාවිතා කළ හැක්කේ මාපිය පන්ති නියතයන් අභිබවා යාම වැළැක්වීමට ය. class Foo {අවසාන පොදු const X = "foo"; } පන්ති තීරුව Foo දිගු කරයි { public const X = "bar"; > මාරක දෝෂය: තීරුව::X හට අවසාන නියතය අභිබවා යා නොහැක Foo::X}
  • fsync සහ fdatasync ශ්‍රිතයන් වෙනස් කිරීම් තැටි හැඹිලියෙන් සුරැකීමට බල කිරීමට යෝජනා කෙරේ. $file = fopen("sample.txt", "w"); fwrite ($ ගොනුව, "සමහර අන්තර්ගතය"); 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; unset ($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

අදහස් එක් කරන්න