PHP 8.2 programming language release

Pagkatapos ng isang taon ng pag-unlad, ang paglabas ng PHP 8.2 programming language ay ipinakita. Kasama sa bagong sangay ang isang serye ng mga bagong feature, pati na rin ang ilang pagbabago na sumisira sa compatibility.

Mga pangunahing pagpapabuti sa PHP 8.2:

  • Nagdagdag ng kakayahang markahan ang isang klase bilang read-only. Ang mga katangian sa naturang mga klase ay maaaring itakda nang isang beses lamang, pagkatapos nito ay hindi na sila mababago. Dati, ang mga indibidwal na katangian ng klase ay maaaring mamarkahang read-only, ngunit ngayon ay maaari mong paganahin ang mode na ito para sa lahat ng mga katangian ng klase nang sabay-sabay. Ang pagtukoy sa flag na "readonly" sa antas ng klase ay humaharang din sa mga katangian mula sa dynamic na pagdaragdag sa klase. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'mali'; // Error: Hindi makagawa ng dynamic na property Post::$unknown
  • Nagdagdag ng magkakahiwalay na uri na "true", "false" at "null", na maaaring tumagal lamang ng isang wastong halaga at ginagamit, halimbawa, upang ibalik ang isang function na may flag ng pagwawakas ng error o isang walang laman na halaga. Dati, ang "true", "false" at "null" ay maaari lamang gamitin kasabay ng iba pang mga uri (halimbawa, "string|false"), ngunit ngayon ay magagamit na ang mga ito nang hiwalay: function alwaysFalse(): false { return false ; }
  • Nagbibigay ng kakayahang mag-filter ng mga sensitibong parameter sa output ng stack trace habang may error. Maaaring kailanganin ang pagputol ng ilang partikular na impormasyon kapag ang impormasyon tungkol sa mga error na nangyayari ay awtomatikong ipinadala sa mga serbisyo ng third-party na sumusubaybay sa mga problema at nagpapaalam sa mga developer tungkol sa mga ito. Halimbawa, maaari mong ibukod ang mga parameter na kinabibilangan ng mga username, password, at mga variable ng kapaligiran mula sa pagsubaybay. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Malalang error: Uncaught Exception: Error sa test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} na itinapon sa test.php sa linya 8
  • Pinapayagan na tukuyin ang mga constant sa mga katangian (trait, isang mekanismo para sa muling paggamit ng code). Ang mga constant na tinukoy sa isang katangian ay maaaring ma-access sa pamamagitan ng klase na gumagamit ng katangian (ngunit hindi sa pamamagitan ng pangalan ng katangian). trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Idinagdag ang kakayahang tukuyin ang mga uri sa disjunctive normal form (DNF, Disjunctive Normal Form), na nagpapahintulot sa iyo na pagsamahin ang unyon ng mga uri (mga koleksyon ng dalawa o higit pang mga uri) at ang intersection ng mga uri (mga uri na ang mga halaga ay nasa ilalim ng ilang sabay-sabay na uri). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } ibalik ang $entity; } }
  • Isang bagong extension na "Random" ang iminungkahi na may mga function at klase para sa pagbuo ng mga pseudo-random na numero at pagkakasunud-sunod. Ang module ay nagbibigay ng isang object-oriented na interface, nagbibigay-daan sa iyo upang pumili ng iba't ibang mga engine para sa pagbuo ng pseudo-random na mga numero, kabilang ang mga angkop para sa paggamit sa cryptography, at nagbibigay ng mga auxiliary function, halimbawa, para sa random na paghahalo ng mga array at string, pagpili ng mga random na array key, sabay-sabay na paggamit ng ilang generator na may sarili mong independiyenteng estado. $rng = $is_production ? bagong Random\Engine\Secure() : bagong Random\Engine\Mt19937(1234); $randomizer = bagong Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Ipinatupad ang locale-independent na conversion ng kaso. Ang mga function tulad ng strtolower() at strtoupper() ngayon ay palaging nagko-convert ng case ng mga character sa hanay ng ASCII na parang nakatakda sa lokal na "C".
  • Nagdagdag ng mga bagong function: 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.
  • Nagdagdag ng mga bagong pamamaraan: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Ang kakayahang dynamic na lumikha ng mga katangian sa isang klase ay hindi na ginagamit. Sa PHP 9.0, ang pag-access sa mga katangian na hindi unang tinukoy sa klase ay magreresulta sa isang error (ErrorException). Ang mga klase na nagbibigay ng __get at __set na mga pamamaraan para sa paggawa ng mga property, o ang mga dynamic na property sa stdClass ay patuloy na gagana nang walang pagbabago, tanging ang implicit na trabaho na may mga hindi umiiral na property ang susuportahan upang maprotektahan ang developer mula sa mga nakatagong bug. Upang mapanatili ang gawain ng lumang code, ang attribute na "#[AllowDynamicProperties]" ay iminungkahi, na nagpapahintulot sa paggamit ng mga dynamic na katangian.
  • Ang kakayahang palitan ang mga variable na halaga sa mga string gamit ang mga expression na "${var}" at ${(var)} ay hindi na ginagamit. Ang suporta para sa karaniwang ginagamit na "{$var}" at "$var" na mga pamalit ay napanatili. Halimbawa: "Hello {$world}"; OK "Hello $world"; OK "Hello ${world}"; Hindi na ginagamit: Ang paggamit ng ${} sa mga string ay hindi na ginagamit
  • Hindi na ginagamit ang bahagyang suportadong mga callable na maaaring tawagan sa pamamagitan ng "call_user_func($callable)" ngunit hindi sumusuporta sa pagtawag sa anyo ng "$callable()": "self::method" "parent::method" "static" ::method " ["sarili", "paraan"] ["magulang", "paraan"] ["static", "paraan"] ["Foo", "Bar::paraan"] [bagong Foo, "Bar: :paraan" ]
  • Ang direktiba ng error_log_mode ay naidagdag sa mga setting, na nagbibigay-daan sa iyong matukoy ang mode ng pag-access sa log ng error.

Pinagmulan: opennet.ru

Magdagdag ng komento