PHP 8.2 ပရိုဂရမ်းမင်းဘာသာစကား ထုတ်ဝေသည်။

ဖွံ့ဖြိုးတိုးတက်မှု တစ်နှစ်အကြာတွင် PHP 8.2 ပရိုဂရမ်းမင်းဘာသာစကားကို မိတ်ဆက်ပြသခဲ့သည်။ ဌာနခွဲအသစ်တွင် ဝန်ဆောင်မှုအသစ်များ ဆက်တိုက်ပါဝင်သည့်အပြင် လိုက်ဖက်ညီမှုကို ချိုးဖျက်နိုင်သော အပြောင်းအလဲများစွာ ပါဝင်ပါသည်။

PHP 8.2 တွင် အဓိကတိုးတက်မှုများ-

  • အတန်းတစ်ခုကို ဖတ်ရန်သာအဖြစ် အမှတ်အသားပြုနိုင်စွမ်းကို ပေါင်းထည့်ထားသည်။ ထိုသို့သော အတန်းများတွင် ပိုင်ဆိုင်မှုများကို တစ်ကြိမ်သာ သတ်မှတ်နိုင်သည်၊ ထို့နောက်တွင် ၎င်းတို့သည် ပြောင်းလဲနိုင်တော့မည် မဟုတ်ပါ။ ယခင်က အတန်းဂုဏ်သတ္တိများကို ဖတ်ရန်သာ အမှတ်အသားပြုထားနိုင်သော်လည်း ယခုအခါ အတန်းဂုဏ်သတ္တိအားလုံးအတွက် ဤမုဒ်ကို တစ်ပြိုင်နက် ဖွင့်နိုင်ပါပြီ။ အတန်းအဆင့်ရှိ "ဖတ်ရန်သာ" အလံကို သတ်မှတ်ခြင်းသည် အတန်းသို့ ရွေ့လျားနိုင်သော ဂုဏ်သတ္တိများ ထပ်လောင်းခြင်းကို ပိတ်ဆို့သည်။ readonly class Post { public function __construct( public string $title ၊ public Author $author ၊ ) {} } $post = new Post(/* … */); $post->unknown = 'မှားသည်'; // အမှား- ပြောင်းလဲနေသော ပိုင်ဆိုင်မှု Post::$unknown ကို ဖန်တီး၍မရပါ။
  • မှန်ကန်သောတန်ဖိုးတစ်ခုသာယူနိုင်ပြီး အမှားအယွင်းရပ်စဲမှုအလံ သို့မဟုတ် တန်ဖိုးအလွတ်တစ်ခုဖြင့် လုပ်ဆောင်ချက်တစ်ခုကို ပြန်ပို့ရန်အတွက် သီးခြားအမျိုးအစားများဖြစ်သည့် "true"၊ "false" နှင့် "null" တို့ကို ထည့်သွင်းထားသည်။ ယခင်က “true”၊ “false” နှင့် “null” တို့ကို အခြားအမျိုးအစားများနှင့်သာ တွဲဖက်အသုံးပြုနိုင်ပါသည် (ဥပမာ၊ “string|false”)၊ သို့သော် ယခုအခါ ၎င်းတို့ကို သီးခြားအသုံးပြုနိုင်သည်- function alwaysFalse(): false { return false ; }
  • အမှားအယွင်းတစ်ခုဖြစ်ပွားချိန်တွင် stack trace output တွင် အရေးကြီးသောဆက်တင်များကို စစ်ထုတ်နိုင်စွမ်းကို ပေးထားသည်။ ပြဿနာများကို ခြေရာခံပြီး ဆော့ဖ်ဝဲရေးသားသူများကို အသိပေးသည့် ပြင်ပဝန်ဆောင်မှုများထံ ဖြစ်ပေါ်လာသည့် အမှားများဆိုင်ရာ အချက်အလက်များကို အလိုအလျောက် ပေးပို့သည့်အခါ အချို့သော အချက်အလက်များကို ဖြတ်တောက်ရန် လိုအပ်ပါသည်။ ဥပမာအားဖြင့်၊ အသုံးပြုသူအမည်များ၊ စကားဝှက်များနှင့် ပတ်၀န်းကျင်ပြောင်းလဲနိုင်သော အမျိုးအစားများပါဝင်သည့် ခြေရာခံများမှ ကန့်သတ်ချက်များကို သင်ဖယ်ထုတ်နိုင်သည်။ လုပ်ဆောင်ချက်စမ်းသပ်ခြင်း($foo၊ #[\SensitiveParameter] $password၊ $baz) {ခြွင်းချက်အသစ်('Error'); } test('foo'၊ 'password'၊ 'baz'); ဆိုးရွားသော အမှား- မဖမ်းမိသော ခြွင်းချက်- test.php:8 တွင် အမှားအယွင်းများ အစုလိုက် ခြေရာကောက်- #0 test.php(11): test('foo'၊ Object(SensitiveParameterValue), 'baz') #1 {main} test.php တွင် ချလိုက်သည် အွန်လိုင်း ၈
  • စရိုက်လက္ခဏာများ (စရိုက်၊ ကုဒ်ကို ပြန်လည်အသုံးပြုသည့် ယန္တရား) တွင် ကိန်းသေများကို သတ်မှတ်ရန် ခွင့်ပြုထားသည်။ trait တွင် သတ်မှတ်ထားသော ကိန်းသေများကို trait ကိုအသုံးပြုသော class မှတဆင့် ဝင်ရောက်ကြည့်ရှုနိုင်သည် (သို့သော် trait name မှမဟုတ်)။ trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { Foo ကိုသုံးပါ။ } var_dump(Bar::CONSTANT); // ၁
  • အမျိုးအစားများ (နှစ်ခုထက်ပိုသောအမျိုးအစားများစုစည်းမှု) နှင့် အမျိုးအစားများ၏ လမ်းဆုံများ (တန်ဖိုးများစွာအောက်တွင် ကျရောက်နေသော အမျိုးအစားများ အမျိုးအစားများ တပြိုင်နက်တည်း)။ class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; } }
  • နောက်ဆက်တွဲအသစ် “ကျပန်း” ကို pseudo-random နံပါတ်များနှင့် sequence များဖန်တီးရန်အတွက် လုပ်ဆောင်ချက်များနှင့် အတန်းများနှင့်အတူ အဆိုပြုထားသည်။ မော်ဂျူးသည် အရာဝတ္ထု-ဆန်သော အင်တာဖေ့စ်ကို ပံ့ပိုးပေးသည်၊၊ သင်သည် လျှို့ဝှက်စာရိုက်ခြင်းတွင် အသုံးပြုရန် သင့်လျော်သော ဂဏန်းများကို ထုတ်လုပ်ရန်အတွက် မတူညီသော အင်ဂျင်များကို ရွေးချယ်နိုင်စေကာ၊ ဥပမာ၊ ကျပန်း arrays နှင့် strings များကို ကျပန်းရောစပ်ရန်အတွက်၊ ကျပန်း array သော့များကို ရွေးချယ်ခြင်း၊ သင်၏ကိုယ်ပိုင်လွတ်လပ်သောပြည်နယ်နှင့်အတူမီးစက်များစွာကိုတစ်ပြိုင်နက်အသုံးပြုခြင်း။ $rng = $is_production ? Random\Engine\Secure() အသစ် : Random\Engine\Mt19937(1234); $randomizer = ကျပန်း\Randomizer အသစ်($rng); $randomizer->shuffleString('foobar');
  • ဒေသန္တရ-အမှီအခိုကင်းသော ကိစ္စအဖြစ် ပြောင်းလဲခြင်းကို အကောင်အထည်ဖော်ခဲ့သည်။ strtolower() နှင့် strtoupper() ကဲ့သို့သော လုပ်ဆောင်ချက်များသည် ယခုအခါ ဒေသန္တရကို "C" သို့ သတ်မှတ်သည့်အခါ ASCII အကွာအဝေးရှိ ဇာတ်ကောင်များ၏ ဖြစ်ရပ်မှန်ကို အမြဲပြောင်းလဲပါသည်။
  • ထပ်လောင်းလုပ်ဆောင်ချက်အသစ်များ- 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 တွင်၊ class တွင် ကနဦးသတ်မှတ်ထားခြင်းမရှိသော ဂုဏ်သတ္တိများကို ဝင်ရောက်ကြည့်ရှုခြင်းသည် အမှားအယွင်း (ErrorException) ကို ဖြစ်ပေါ်စေသည်။ __get နှင့် __set နည်းလမ်းများကို ဖန်တီးခြင်း သို့မဟုတ် stdClass တွင် ရွေ့လျားနိုင်သော ဂုဏ်သတ္တိများကို ဖန်တီးပေးသည့် အတန်းများသည် အပြောင်းအလဲမရှိဘဲ ဆက်လက်အလုပ်လုပ်နေမည်ဖြစ်ပြီး၊ မရှိမဖြစ်မရှိသော ဂုဏ်သတ္တိများနှင့် သွယ်ဝိုက်သောအလုပ်များကိုသာ ဆော့ဖ်ဝဲရေးသားသူကို ဝှက်ထားသော ချို့ယွင်းချက်များမှကာကွယ်ရန် ပံ့ပိုးပေးမည်ဖြစ်သည်။ ကုဒ်ဟောင်း၏ လုပ်ဆောင်ချက်ကို ထိန်းသိမ်းရန်၊ “#[AllowDynamicProperties]” ရည်ညွှန်းချက်ကို အဆိုပြုထားပြီး၊ ပြောင်းလဲနေသော ဂုဏ်သတ္တိများကို အသုံးပြုခွင့်ပေးသည်။
  • "${var}" နှင့် ${(var)}" expressions များကို အသုံးပြု၍ ပြောင်းလဲနိုင်သောတန်ဖိုးများကို စာကြောင်းများအဖြစ် အစားထိုးနိုင်မှုကို ရပ်တန့်ထားသည်။ အသုံးများသော "{$var}" နှင့် "$var" အစားထိုးခြင်းများအတွက် ပံ့ပိုးမှုအား ထိန်းသိမ်းထားပါသည်။ ဥပမာ- "Hello {$world}"; အိုကေ "Hello $world"; အိုကေ "မင်္ဂလာပါ ${world}"; ကန့်ကွက်ထားသည်- စာကြောင်းများတွင် ${} ကိုအသုံးပြုခြင်းကို ကန့်ကွက်ထားသည်။
  • "call_user_func($callable)" မှတစ်ဆင့် ခေါ်ဆိုနိုင်သော တစ်စိတ်တစ်ပိုင်း ပံ့ပိုးပေးထားသည့် ခေါ်ဆိုနိုင်သော ခေါ်ဆိုမှုများကို ရပ်ဆိုင်းထားသော်လည်း "$callable()" ဖောင်ပုံစံဖြင့် ခေါ်ဆိုခြင်းကို မပံ့ပိုးပါ: "self::method" "parent::method" "static :: နည်းလမ်း" ["မိမိကိုယ်ကို", "နည်းလမ်း"] ["မိဘ", "နည်းလမ်း"] ["ငြိမ်", "နည်းလမ်း"] ["Foo", "Bar::method"] [Foo အသစ်၊ "ဘား- :နည်းလမ်း" "]
  • error_log_mode လမ်းညွှန်ချက်ကို ဆက်တင်များသို့ ပေါင်းထည့်ထားပြီး၊ အမှားအယွင်းမှတ်တမ်းသို့ ဝင်ရောက်ခွင့်မုဒ်ကို သင်ဆုံးဖြတ်နိုင်စေမည်ဖြစ်သည်။

source: opennet.ru

မှတ်ချက် Add