αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ PHP 8.2

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž˜αž½αž™αž†αŸ’αž“αžΆαŸ†αž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ PHP 8.2 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αŸ” αžŸαžΆαžαžΆαžαŸ’αž˜αžΈαž“αŸαŸ‡αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‘αžΆαŸ†αž„αžŸαŸŠαŸαžšαžΈαž“αŸƒαž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈ αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž”αŸ†αž”αŸ‚αž€αž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαŸ”

αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„ PHP 8.2αŸ–

  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαŸ’αž“αžΆαž€αŸ‹αžαžΆαž”αžΆαž“αžαŸ‚αž’αžΆαž“αŸ” αž›αž€αŸ’αžαžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹αž”αŸ‚αž”αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ‚αž˜αŸ’αžαž„αž‚αžαŸ‹ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αž–αž½αž€αžœαžΆαž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αžΆαž“αž‘αŸαŸ” αž–αžΈαž˜αž»αž“ αž›αž€αŸ’αžαžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžαŸ’αž“αžΆαž€αŸ‹αž“αžΈαž˜αž½αž™αŸ—αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž”αžΆαž“αžαŸ‚αž’αžΆαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αžΎαž€αžšαž”αŸ€αž”αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αž€αŸ’αžαžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžαŸ’αž“αžΆαž€αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αŸ” αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‘αž„αŸ‹ "αž”αžΆαž“αžαŸ‚αž’αžΆαž“" αž“αŸ…αž€αž˜αŸ’αžšαž·αžαžαŸ’αž“αžΆαž€αŸ‹αž€αŸαžšαžΆαžšαžΆαŸ†αž„αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž–αžΈαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžαžΆαž˜αžœαž“αŸ’αžαž‘αŸ…αžαŸ’αž“αžΆαž€αŸ‹αž•αž„αžŠαŸ‚αžšαŸ” readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'ខុស'; // αž€αŸ†αž αž»αžŸαŸ– αž˜αž·αž“αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž dynamic property Post::$unknown
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž”αŸ’αžšαž—αŸαž‘αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ "αž–αž·αž" "αž˜αž·αž“αž–αž·αž" αž“αž·αž„ "αž‘αž‘αŸ" αžŠαŸ‚αž›αž’αžΆαž…αž™αž€αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αž½αž™ αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαžαŸ’αžšαž‘αž”αŸ‹αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž‘αž„αŸ‹αž”αž‰αŸ’αž…αž”αŸ‹αž€αŸ†αž αž»αžŸ αž¬αžαž˜αŸ’αž›αŸƒαž‘αž‘αŸαŸ” αž–αžΈαž˜αž»αž“ "true", "false" αž“αž·αž„ "null" αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αžαŸ‚αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžŸαŸαž„αž‘αŸ€αž (αž§αž‘αžΆαž αžšαžŽαŸ "string|false") αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž₯αž‘αžΌαžœαž“αŸαŸ‡αž–αž½αž€αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαŸ– function alwaysFalse(): false { return false ; }
  • αž•αŸ’αžαž›αŸ‹αž›αž‘αŸ’αž’αž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžšαžŸαžΎαž”αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž‘αŸ’αž’αž•αž›αžŠαžΆαž“αž‡αž„αŸ‹αž€αŸ†αž‘αž»αž„αž–αŸαž›αž˜αžΆαž“αž€αŸ†αž αž»αžŸαŸ” αž€αžΆαžšαž€αžΆαžαŸ‹αž…αŸαž‰αž–αŸαžαŸŒαž˜αžΆαž“αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž’αžΆαž…αž‡αžΆαž€αžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ…αž€αžΆαž“αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈαžŠαŸ‚αž›αžαžΆαž˜αžŠαžΆαž“αž”αž‰αŸ’αž αžΆ αž“αž·αž„αž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αžŠαž›αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž’αŸ†αž–αžΈαž–αž½αž€αž‚αŸαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€αž’αžΆαž…αžŠαž€αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžˆαŸ’αž˜αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž“αž·αž„αž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“αž–αžΈαž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž˜αž»αžαž„αžΆαžš ($foo, #[\SensitiveParameter] $password, $baz) { throw new Exception('Error'); } test('foo', 'password', 'baz'); αž€αŸ†αž αž»αžŸαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαŸ– Uncaught Exception: Error in test.php:8 Stack track: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} αž”αŸ„αŸ‡αž…αŸ„αž›αž€αŸ’αž“αž»αž„ test.php αž“αŸ…αž›αžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹ 8
  • αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž€αŸ†αžŽαžαŸ‹αžαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžŽαŸˆ (αž›αž€αŸ’αžαžŽαŸˆ αž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžΎαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž€αžΌαžŠ)αŸ” αžαŸαžšαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžŽαŸˆαž˜αž½αž™αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΌαž›αž”αŸ’αžšαžΎαžαžΆαž˜αžšαž™αŸˆαžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž›αž€αŸ’αžαžŽαŸˆ (αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αžαžΆαž˜αžšαž™αŸˆαžˆαŸ’αž˜αŸ„αŸ‡αž›αž€αŸ’αžαžŽαŸˆ) αŸ” αž›αž€αŸ’αžαžŽαŸˆ Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // αž€αŸ†αž αž»αžŸαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžš } } αžšαž”αžΆαžšαžαŸ’αž“αžΆαž€αŸ‹ {αž”αŸ’αžšαžΎ Foo; } var_dump(Bar::CONSTANT); // ៑
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αŸ’αžšαž—αŸαž‘αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž’αž˜αŸ’αž˜αžαžΆαžŠαŸ‚αž›αž˜αž·αž“αž”αŸ‚αž„αž…αŸ‚αž€ (DNF, Disjunctive Normal Form) αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž”αŸ’αžšαž—αŸαž‘αžŸαž αž‡αžΈαž– (αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž–αžΈαžšαž”αŸ’αžšαž—αŸαž‘ αž¬αž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž—αŸαž‘) αž“αž·αž„αž…αŸ†αž“αž»αž…αž”αŸ’αžšαžŸαž–αŸ’αžœαž“αŸƒαž”αŸ’αžšαž—αŸαž‘ (αž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆαž’αŸ’αž›αžΆαž€αŸ‹αž€αŸ’αžšαŸ„αž˜αž‡αžΆαž…αŸ’αžšαžΎαž“ αž”αŸ’αžšαž—αŸαž‘αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆ) αŸ” class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } αžαŸ’αžšαž‘αž”αŸ‹ $entity; } }
  • αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αž˜αžΈ "αž…αŸƒαžŠαž“αŸ’αž™" αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αž“αžΎαž‘αžΎαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αž»αžαž„αžΆαžš αž“αž·αž„αžαŸ’αž“αžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž›αŸαž αž“αž·αž„αž›αŸ†αžŠαžΆαž”αŸ‹αž…αŸƒαžŠαž“αŸ’αž™αŸ” αž˜αŸ‰αžΌαžŒαž»αž›αž•αŸ’αžŠαž›αŸ‹αž“αžΌαžœαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αžαž˜αŸ’αžšαž„αŸ‹αž‘αž·αžŸαžœαžαŸ’αžαž» αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž›αŸαžαž…αŸƒαžŠαž“αŸ’αž™ αžšαž½αž˜αž‘αžΆαŸ†αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžŸαŸαž€αŸ’αžαž·αžŸαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αŸ’αžšαžΈαž”αž‚αŸ’αžšαžΈαž” αž“αž·αž„αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαž‡αŸ†αž“αž½αž™ αž§αž‘αžΆαž αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž›αžΆαž™αž’αžΆαžšαŸ αž“αž·αž„αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™ αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž’αžΆαžšαŸαž…αŸƒαžŠαž“αŸ’αž™αŸ” αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž›αžΎαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžšαžŠαŸ’αž‹αž―αž€αžšαžΆαž‡αŸ’αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” $rng = $is_production ? αžαŸ’αž˜αžΈ 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}"; αž™αž›αŸ‹αž–αŸ’αžšαž˜ "αž‡αŸ†αžšαžΆαž”αžŸαž½αžš $ world"; αž™αž›αŸ‹αž–αŸ’αžšαž˜ "αž‡αŸ†αžšαžΆαž”αžŸαž½αžš ${world}"; αž”αžŠαž·αžŸαŸαž’αŸ– αž€αžΆαžšαž”αŸ’αžšαžΎ ${} αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’
  • αž”αžΆαž“αž”αžŠαž·αžŸαŸαž’αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ„αž™αž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž’αžΆαž…αž αŸ…αž”αžΆαž“αžαžΆαž˜αžšαž™αŸˆ "call_user_func($callable)" αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž αŸ…αžαžΆαž˜αž‘αž˜αŸ’αžšαž„αŸ‹ "$callable()": "self::method" "parent::method" "static" ::method "["αžαŸ’αž›αž½αž“αž―αž„", "αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž"] ["αžͺαž–αž»αž€αž˜αŸ’αžαžΆαž™", "αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž"] ["αž‹αž·αžαž·αžœαž“αŸ’αž", "αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž"] ["αž αŸ’αžœαžΌ", "αžšαž”αžΆαžš::αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž"] [Foo αžαŸ’αž˜αžΈ, "αžšαž”αžΆαžš: :αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž" ]
  • αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† error_log_mode αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αžšαž”αŸ€αž”αž…αžΌαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ…αž€αžΆαž“αŸ‹αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž€αŸ†αž αž»αžŸαŸ”

αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹