ืืืืจ ืฉื ื ืฉื ืคืืชืื, ืืืฆืื ืฉืืจืืจ ืฉืคืช ืืชืื ืืช 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