Ir prezentÄts pirmais PHP 8.2 programmÄÅ”anas valodas jaunÄs atzara alfa laidiens. IznÄkÅ”ana paredzÄta 24. novembrÄ«. Galvenie jauninÄjumi, kas jau ir pieejami testÄÅ”anai vai plÄnoti ievieÅ”anai PHP 8.2 versijÄ:
- Pievienoti atseviŔķi veidi āfalseā un ānullā, kurus var izmantot, piemÄram, funkcijai, lai atgrieztu kļūdas beigu karogu vai tukÅ”u vÄrtÄ«bu. IepriekÅ” āfalseā un ānullā varÄja lietot tikai kopÄ ar citiem veidiem (piemÄram, āstring|falseā), bet tagad tos var lietot atseviŔķi: function alwaysFalse(): false { return false; }
- Pievienota iespÄja atzÄ«mÄt klasi kÄ tikai lasÄmu. RekvizÄ«tus Å”ÄdÄs klasÄs var iestatÄ«t tikai vienu reizi, pÄc tam tos nevar mainÄ«t. IepriekÅ” atseviŔķus klases rekvizÄ«tus varÄja atzÄ«mÄt kÄ tikai lasÄmus, taÄu tagad Å”o režīmu varat iespÄjot visiem klases rekvizÄ«tiem vienlaikus. NorÄdot karodziÅu "tikai lasÄms" klases lÄ«menÄ«, tiek bloÄ·Äta rekvizÄ«tu dinamiska pievienoÅ”ana klasei. readonly class Post { public function __construct( public string $nosaukums, public Author $author, ) {} } $post = new Post(/* ⦠*/); $post->unknown = 'nepareizi'; // Kļūda: nevar izveidot dinamisku rekvizÄ«tu Post::$unknown
- IespÄja dinamiski izveidot rekvizÄ«tus klasÄ (piemÄram, "post->unknown" iepriekÅ” minÄtajÄ piemÄrÄ) ir novecojusi. PHP 9.0, piekļūstot rekvizÄ«tiem, kas klasÄ sÄkotnÄji nav definÄti, radÄ«s kļūdu (ErrorException). Klases, kas nodroÅ”ina __get un __set metodes rekvizÄ«tu izveidei vai dinamiskos rekvizÄ«tus programmÄ stdClass, turpinÄs darboties bez izmaiÅÄm, tiks atbalstÄ«ts tikai netieÅ”s darbs ar neesoÅ”iem rekvizÄ«tiem, lai aizsargÄtu izstrÄdÄtÄju no slÄptÄm kļūdÄm. Lai saglabÄtu vecÄ koda darbÄ«bu, tiek piedÄvÄts atribÅ«ts ā#[AllowDynamicProperties]ā, kas ļauj izmantot dinamiskos rekvizÄ«tus.
- NodroÅ”ina iespÄju kļūdas laikÄ filtrÄt sensitÄ«vus parametrus steka izsekoÅ”anas izvadÄ. Noteiktas informÄcijas izgrieÅ”ana var bÅ«t nepiecieÅ”ama, ja informÄcija par kļūdÄm tiek automÄtiski nosÅ«tÄ«ta treÅ”o puÅ”u pakalpojumiem, kas izseko problÄmas un informÄ par tÄm izstrÄdÄtÄjus. PiemÄram, varat izslÄgt no izsekoÅ”anas parametrus, kas ietver lietotÄjvÄrdus, paroles un vides mainÄ«gos. funkciju tests( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'parole', 'baz'); FatÄla kļūda: nenoÄ·erts IzÅÄmums: kļūda test.php: 8. Steka izsekoÅ”ana: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} iemests test.php 8. rindÄ
- IespÄja aizstÄt mainÄ«go vÄrtÄ«bas virknÄs, izmantojot izteicienus "${var}" un ${(var)}, ir novecojusi. Atbalsts bieži lietotajiem "{$var}" un "$var" aizstÄjumiem ir saglabÄts. PiemÄram: "Sveiki, {$world}"; OK "Sveika $world"; Labi "Sveiki, ${world}"; Novecojis: ${} izmantoÅ”ana virknÄs ir novecojusi
- NovecojuÅ”i daļÄji atbalstÄ«tie izsaucamie vienumi, kurus var izsaukt, izmantojot "call_user_func($callable)", bet neatbalsta izsaukÅ”anu formÄ "$callable()": "self::method" "parent::method" "static" ::method " ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [jauns Foo, "Bar: :method" ]
- Ieviesta no lokalizÄcijas neatkarÄ«ga reÄ£istra konvertÄÅ”ana. TÄdas funkcijas kÄ strtolower() un strtoupper() tagad vienmÄr pÄrveido rakstzÄ«mju reÄ£istru ASCII diapazonÄ tÄ, it kÄ tÄs bÅ«tu iestatÄ«tas uz "C" lokalizÄciju.
Avots: opennet.ru
