PHP 8.2 programozási nyelv kiadása

Egy év fejlesztés után bemutatták a PHP 8.2 programozási nyelv kiadását. Az új ág egy sor új szolgáltatást, valamint számos olyan változtatást tartalmaz, amelyek megszakítják a kompatibilitást.

Főbb fejlesztések a PHP 8.2-ben:

  • Hozzáadtuk az osztály írásvédettként való megjelölésének lehetőségét. Az ilyen osztályokban a tulajdonságok csak egyszer állíthatók be, ezután már nem módosíthatók. Korábban az egyes osztálytulajdonságokat csak olvashatóként lehetett megjelölni, de most már engedélyezheti ezt a módot az összes osztálytulajdonságra egyszerre. A "csak olvasható" jelző osztályszinten történő megadása azt is megakadályozza, hogy a tulajdonságok dinamikusan kerüljenek az osztályba. readonly class Post { public function __construct( public string $cím, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'rossz'; // Hiba: Nem lehet dinamikus tulajdonságot létrehozni Post::$unknown
  • Külön „igaz”, „hamis” és „null” típusok kerültek hozzáadásra, amelyek csak egy érvényes értéket vehetnek fel, és például hibalezáró jelzővel vagy üres értékkel rendelkező függvények visszaadására szolgálnak. Korábban az „igaz”, „hamis” és „null” csak más típusokkal együtt használható (például „string|false”), most azonban külön is használhatók: function alwaysFalse(): false { return false ; }
  • Lehetővé teszi az érzékeny paraméterek szűrését a verem nyomkövetési kimenetében hiba esetén. Bizonyos információk kivágására akkor lehet szükség, ha a felmerülő hibákkal kapcsolatos információkat automatikusan elküldik a harmadik féltől származó szolgáltatásoknak, amelyek nyomon követik a problémákat, és tájékoztatják a fejlesztőket azokról. Kizárhatja például a felhasználóneveket, jelszavakat és környezeti változókat tartalmazó paramétereket a nyomkövetésből. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'jelszó', 'baz'); Végzetes hiba: nem fogott Kivétel: Hiba a test.php-ben: 8 Verem nyomkövetés: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} a test.php fájlban a 8-as vonalon
  • Megengedett konstansok meghatározása a tulajdonságokban (tulajdonság, a kód újrafelhasználásának mechanizmusa). A tulajdonságban meghatározott állandók a tulajdonságot használó osztályon keresztül érhetők el (de nem a tulajdonság nevén). vonás Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Végzetes hiba } } class Bar { use Foo; } var_dump(Bar::CONSTANT); 1
  • Hozzáadtuk a típusok megadásának lehetőségét a diszjunktív normál formában (DNF, Disjunctive Normal Form), amely lehetővé teszi a típusok egyesülésének (két vagy több típus gyűjteménye) és a típusok metszéspontjának (olyan típusok, amelyek értékei több alá esnek) kombinálását. típusok egyszerre). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; } }
  • Egy új „Random” kiterjesztést javasoltak függvényekkel és osztályokkal pszeudo-véletlen számok és sorozatok generálására. A modul objektum-orientált felületet biztosít, lehetővé teszi különböző motorok kiválasztását pszeudo-véletlen számok generálására, beleértve a kriptográfiában való felhasználásra alkalmasakat is, valamint segédfunkciókat biztosít például tömbök és karakterláncok véletlenszerű keveréséhez, véletlenszerű tömbkulcsok kiválasztásához, több generátor egyidejű használata saját független állapottal. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Megvalósított terület-független esetkonverzió. Az olyan függvények, mint a strtolower() és az strtoupper() mostantól mindig úgy alakítják át az ASCII tartományban lévő karakterek kis- és nagybetűit, mintha „C” területi beállításra lennének beállítva.
  • Új funkciók hozzáadva: 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.
  • Új módszerek hozzáadva: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • A tulajdonságok dinamikus létrehozásának képessége egy osztályban elavult. A PHP 9.0-ban az osztályban eredetileg nem definiált tulajdonságok elérése hibát (ErrorException) eredményez. Azok az osztályok, amelyek __get és __set metódusokat biztosítanak a tulajdonságok létrehozásához, vagy az stdClass dinamikus tulajdonságait, továbbra is változtatás nélkül működnek, csak a nem létező tulajdonságokkal végzett implicit munka lesz támogatott, hogy megvédje a fejlesztőt a rejtett hibáktól. A régi kód működésének megőrzése érdekében javasolt az „#[AllowDynamicProperties]” attribútum, amely lehetővé teszi a dinamikus tulajdonságok használatát.
  • A változók értékeinek karakterláncokba való helyettesítésének lehetősége a "${var}" és ${(var)} kifejezések használatával elavult. Az általánosan használt "{$var}" és "$var" helyettesítések támogatása megmaradt. Például: "Hello {$world}"; OK "Hello $world"; OK "Hello ${world}"; Elavult: A(z) ${} karakterláncok használata elavult
  • Elavult, részben támogatott hívható elemek, amelyek a "call_user_func($callable)" segítségével hívhatók, de nem támogatják a "$callable()" formátumú hívást: "self::method" "parent::method" "static" ::method " ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar: :method" ]
  • Az error_log_mode direktíva hozzáadásra került a beállításokhoz, lehetővé téve a hibanapló elérési módjának meghatározását.

Forrás: opennet.ru

Hozzászólás