ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช PHP 8.2

ืœืื—ืจ ืฉื ื” ืฉืœ ืคื™ืชื•ื—, ื”ื•ืฆื’ื” ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช PHP 8.2. ื”ืกื ื™ืฃ ื”ื—ื“ืฉ ื›ื•ืœืœ ืฉื•ืจื” ืฉืœ ืคื™ืฆ'ืจื™ื ื—ื“ืฉื™ื, ื›ืžื• ื’ื ืžืกืคืจ ืฉื™ื ื•ื™ื™ื ื”ืฉื•ื‘ืจื™ื ืืช ื”ืชืื™ืžื•ืช.

ืฉื™ืคื•ืจื™ื ืžืจื›ื–ื™ื™ื ื‘-PHP 8.2:

  • ื ื•ืกืคื” ื”ื™ื›ื•ืœืช ืœืกืžืŸ ื›ื™ืชื” ื›ืงืจื™ืื” ื‘ืœื‘ื“. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืžืืคื™ื™ื ื™ื ื‘ืžื—ืœืงื•ืช ื›ืืœื” ืคืขื ืื—ืช ื‘ืœื‘ื“, ื•ืœืื—ืจ ืžื›ืŸ ื”ื ืœื ื™ื”ื™ื• ื–ืžื™ื ื™ื ืœืฉื™ื ื•ื™. ื‘ืขื‘ืจ, ื ื™ืชืŸ ื”ื™ื” ืœืกืžืŸ ืžืืคื™ื™ื ื™ ืžื—ืœืงื” ื‘ื•ื“ื“ื™ื ืœืงืจื™ืื” ื‘ืœื‘ื“, ืืš ื›ืขืช ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืžืฆื‘ ื–ื” ืขื‘ื•ืจ ื›ืœ ืžืืคื™ื™ื ื™ ื”ืžื—ืœืงื” ื‘ื‘ืช ืื—ืช. ืฆื™ื•ืŸ ื”ื“ื’ืœ "ืœืงืจื™ืื” ื‘ืœื‘ื“" ื‘ืจืžืช ื”ืžื—ืœืงื” ื—ื•ืกื ื’ื ืืช ื”ื”ื•ืกืคื” ื”ื“ื™ื ืžื™ืช ืฉืœ ืžืืคื™ื™ื ื™ื ืœืžื—ืœืงื”. classonly class Post { public function __construct( ืžื—ืจื•ื–ืช ืฆื™ื‘ื•ืจื™ืช $title, Public Author $author, ) {} } $post = new Post(/* โ€ฆ */); $post->unknown = 'ืฉื’ื•ื™'; // ืฉื’ื™ืื”: ืœื ื ื™ืชืŸ ืœื™ืฆื•ืจ ืžืืคื™ื™ืŸ ื“ื™ื ืžื™ Post::$unknown
  • ื ื•ืกืคื• ืกื•ื’ื™ื ื ืคืจื“ื™ื "true", "false" ื•- "null", ืฉื™ื›ื•ืœื™ื ืœืงื—ืช ืจืง ืขืจืš ื—ื•ืงื™ ืื—ื“ ื•ืžืฉืžืฉื™ื, ืœืžืฉืœ, ืœื”ื—ื–ืจืช ืคื•ื ืงืฆื™ื” ืขื ื“ื’ืœ ืกื™ื•ื ืฉื’ื™ืื” ืื• ืขืจืš ืจื™ืง. ื‘ืขื‘ืจ, ื ื™ืชืŸ ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘-"true", "false" ื•-"null" ืจืง ื‘ืฉื™ืœื•ื‘ ืขื ืกื•ื’ื™ื ืื—ืจื™ื (ืœื“ื•ื’ืžื”, "string|false"), ืืš ื›ืขืช ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ื‘ื ืคืจื“: function alwaysFalse(): false { return false ; }
  • ืกื™ืคืงื” ืืช ื”ื™ื›ื•ืœืช ืœืกื ืŸ ื”ื’ื“ืจื•ืช ืจื’ื™ืฉื•ืช ื‘ืคืœื˜ ืžืขืงื‘ ืžื—ืกื ื™ืช ื‘ื–ืžืŸ ืฉื’ื™ืื”. ื ื™ืชื•ืง ืžื™ื“ืข ืžืกื•ื™ื ืขืฉื•ื™ ืœื”ื™ื“ืจืฉ ื›ืืฉืจ ืžื™ื“ืข ืขืœ ืฉื’ื™ืื•ืช ื”ืžืชืจื—ืฉื•ืช ื ืฉืœื— ืื•ื˜ื•ืžื˜ื™ืช ืœืฉื™ืจื•ืชื™ ืฆื“ ืฉืœื™ืฉื™ ืฉืขื•ืงื‘ื™ื ืื—ืจ ื‘ืขื™ื•ืช ื•ืžื•ื“ื™ืขื™ื ืœืžืคืชื—ื™ื ืขืœื™ื”ืŸ. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœื”ื•ืฆื™ื ืคืจืžื˜ืจื™ื ืžื”ืžืขืงื‘ ื”ื›ื•ืœืœื™ื ืฉืžื•ืช ืžืฉืชืžืฉ, ืกื™ืกืžืื•ืช ื•ืžืฉืชื ื™ ืกื‘ื™ื‘ื”. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'ืกื™ืกืžื”', 'baz'); ืฉื’ื™ืื” ืงื˜ืœื ื™ืช: ื—ืจื™ื’ื” ืฉืœื ื ืชืคืกื”: ืฉื’ื™ืื” ื‘-test.php:8 ืขืงื‘ื•ืช ืžื—ืกื ื™ืช: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} ื ื–ืจืง ื‘-test.php ื‘ืื™ื ื˜ืจื ื˜ 8
  • ืžื•ืชืจ ืœื”ื’ื“ื™ืจ ืงื‘ื•ืขื™ื ื‘ืชื›ื•ื ื•ืช (ืชื›ื•ื ื”, ืžื ื’ื ื•ืŸ ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืงื•ื“). ื ื™ืชืŸ ืœื’ืฉืช ืœืงื‘ื•ืขื™ื ื”ืžื•ื’ื“ืจื™ื ื‘ืชื›ื•ื ื” ื“ืจืš ื”ืžื—ืœืงื” ืฉืžืฉืชืžืฉืช ื‘ืชื›ื•ื ื” (ืืš ืœื ื“ืจืš ืฉื ื”ืชื›ื•ื ื”). ืชื›ื•ื ื” Foo { const public CONSTANT = 1; public function bar(): int { return self::CONSTANT; // ืฉื’ื™ืื” ื—ืžื•ืจื” } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • ื ื•ืกืคื” ื”ื™ื›ื•ืœืช ืœืฆื™ื™ืŸ ื˜ื™ืคื•ืกื™ื ื‘ืฆื•ืจื” ื ื•ืจืžืœื™ืช ื“ื™ืกjunktive (DNF, Disjunctive Normal Form), ื”ืžืืคืฉืจืช ืœืฉืœื‘ ืืช ืื™ื—ื•ื“ ื”ื˜ื™ืคื•ืกื™ื (ืื•ืกืคื™ื ืฉืœ ืฉื ื™ ืกื•ื’ื™ื ืื• ื™ื•ืชืจ) ื•ื”ืฆื˜ืœื‘ื•ืช ืฉืœ ื˜ื™ืคื•ืกื™ื (ื˜ื™ืคื•ืกื™ื ืฉื”ืขืจื›ื™ื ืฉืœื”ื ื ื•ืคืœื™ื ืชื—ืช ื›ืžื” ืกื•ื’ื™ื ื‘ื• ื–ืžื ื™ืช). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } ื”ื—ื–ืจ $entity; } }
  • ื”ืจื—ื‘ื” ื—ื“ืฉื” "Random" ื”ื•ืฆืขื” ืขื ืคื•ื ืงืฆื™ื•ืช ื•ืžื—ืœืงื•ืช ืœื™ืฆื™ืจืช ืžืกืคืจื™ื ื•ืจืฆืคื™ื ืคืกืื•ื“ื• ืืงืจืื™ื™ื. ื”ืžื•ื“ื•ืœ ืžืกืคืง ืžืžืฉืง ืžื•ื ื—ื” ืขืฆืžื™ื, ืžืืคืฉืจ ืœื‘ื—ื•ืจ ืžื ื•ืขื™ื ืฉื•ื ื™ื ืœื”ืคืงืช ืžืกืคืจื™ื ืคืกืื•ื“ื• ืืงืจืื™ื™ื, ื›ื•ืœืœ ื›ืืœื• ื”ืžืชืื™ืžื™ื ืœืฉื™ืžื•ืฉ ื‘ื”ืฆืคื ื”, ื•ืžืกืคืง ืคื•ื ืงืฆื™ื•ืช ืขื–ืจ, ืœืžืฉืœ, ืœืขืจื‘ื•ื‘ ืืงืจืื™ ืฉืœ ืžืขืจื›ื™ื ื•ืžื™ืชืจื™ื, ื‘ื—ื™ืจืช ืžืคืชื—ื•ืช ืžืขืจืš ืืงืจืื™ื™ื, ืฉื™ืžื•ืฉ ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ื’ื ืจื˜ื•ืจื™ื ืขื ืžื“ื™ื ื” ืขืฆืžืื™ืช ืžืฉืœืš. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • ื”ื˜ืžืขื” ื”ืžืจืช ืžืงืจื” ืœืœื ืชืœื•ืช ืžืงื•ืžื™. ืคื•ื ืงืฆื™ื•ืช ื›ืžื• strtolower() ื•-strtoupper() ื›ืขืช ืชืžื™ื“ ืžืžื™ืจื•ืช ืืช ื”ืื•ืชื™ื•ืช ืฉืœ ืชื•ื•ื™ื ื‘ื˜ื•ื•ื— ASCII, ื›ืžื• ื‘ืขืช ื”ื’ื“ืจืช ื”ืžืงื•ื ืœ-"C".
  • ื ื•ืกืคื• ืคื•ื ืงืฆื™ื•ืช ื—ื“ืฉื•ืช: 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, ื’ื™ืฉื” ืœืžืืคื™ื™ื ื™ื ืฉืื™ื ื ืžื•ื’ื“ืจื™ื ื‘ืชื—ื™ืœื” ื‘ืžื—ืœืงื” ืชื’ืจื•ื ืœืฉื’ื™ืื” (ErrorException). ืžื—ืœืงื•ืช ื”ืžืกืคืงื•ืช ืฉื™ื˜ื•ืช __get ื•-__set ืœื™ืฆื™ืจืช ืžืืคื™ื™ื ื™ื, ืื• ืžืืคื™ื™ื ื™ื ื“ื™ื ืžื™ื™ื ื‘-stdClass ื™ืžืฉื™ื›ื• ืœืขื‘ื•ื“ ืœืœื ืฉื™ื ื•ื™ื™ื, ืจืง ืขื‘ื•ื“ื” ืžืจื•ืžื–ืช ืขื ืžืืคื™ื™ื ื™ื ืœื ืงื™ื™ืžื™ื ืชืชืžื•ืš ื›ื“ื™ ืœื”ื’ืŸ ืขืœ ื”ืžืคืชื— ืžืคื ื™ ื‘ืื’ื™ื ื ืกืชืจื™ื. ื›ื“ื™ ืœืฉืžืจ ืืช ืขื‘ื•ื“ืช ื”ืงื•ื“ ื”ื™ืฉืŸ, ืžื•ืฆืขืช ื”ืชื›ื•ื ื” "#[AllowDynamicProperties]", ื”ืžืืคืฉืจืช ืฉื™ืžื•ืฉ ื‘ืžืืคื™ื™ื ื™ื ื“ื™ื ืžื™ื™ื.
  • ื”ื™ื›ื•ืœืช ืœื”ื—ืœื™ืฃ ืขืจื›ื™ ืžืฉืชื ื™ื ืœืžื—ืจื•ื–ื•ืช ื‘ืืžืฆืขื•ืช ื‘ื™ื˜ื•ื™ื™ "${var}" ื•-${(var)}" ื”ื•ืฆืื” ืžืฉื™ืžื•ืฉ. ื”ืชืžื™ื›ื” ื‘ื”ื—ืœืคื•ืช "{$var}" ื•-"$var" ื”ื ืคื•ืฆื•ืช ื ืฉืžืจื”. ืœื“ื•ื’ืžื”: "ืฉืœื•ื {$world}"; ื‘ืกื“ืจ "ืฉืœื•ื $ืขื•ืœื"; ืื™ืฉื•ืจ "ืฉืœื•ื ${ืขื•ืœื}"; ื”ื•ืฆื ืžืฉื™ืžื•ืฉ: ื”ืฉื™ืžื•ืฉ ื‘-${} ื‘ืžื—ืจื•ื–ื•ืช ื”ื•ืฆื ืžืฉื™ืžื•ืฉ
  • ื ื™ืชื ื™ื ืœื”ืชืงืฉืจื•ืช ื ืชืžื›ื™ื ื—ืœืงื™ืช ืฉื ื™ืชืŸ ืœืงืจื•ื ื‘ืืžืฆืขื•ืช "call_user_func($callable)" ื”ื•ืฆืื• ืžืฉื™ืžื•ืฉ, ืืš ืื™ื ื ืชื•ืžื›ื™ื ื‘ืงืจื™ืื” ื‘ืฆื•ืจื” "$callable()": "self::method" "parent::method" "static :: method" ["ืขืฆืžื™", "ืฉื™ื˜ื”"] ["ื”ื•ืจื”", "ืฉื™ื˜ื”"] ["ืกื˜ื˜ื™", "ืฉื™ื˜ื”"] ["Foo", "Bar::method"] [ื—ื“ืฉ Foo, "Bar: :method" "]
  • ื”ื”ื ื—ื™ื” error_log_mode ื ื•ืกืคื” ืœื”ื’ื“ืจื•ืช, ื•ืžืืคืฉืจืช ืœืš ืœืงื‘ื•ืข ืืช ืžืฆื‘ ื”ื’ื™ืฉื” ืœื™ื•ืžืŸ ื”ืฉื’ื™ืื•ืช.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”