Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ PHP 8.2. ΠΠΎΠ²ΠΈΡΡ ΠΊΠ»ΠΎΠ½ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ΅ΡΠΈΡ ΠΎΡ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°ΡΡΡΠ°Π²Π°Ρ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΠ°.
ΠΠ»ΡΡΠΎΠ²ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² PHP 8.2:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ»Π°Ρ ΠΊΠ°ΡΠΎ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅. Π‘Π²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π² ΡΠ°ΠΊΠΈΠ²Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΡΠ°ΠΌΠΎ Π²Π΅Π΄Π½ΡΠΆ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° ΠΏΡΠΎΠΌΡΠ½Π°. ΠΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈΡΠ΅ ΠΊΠ»Π°ΡΠΎΠ²Π΅ ΠΌΠΎΠΆΠ΅Ρ Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅, Π½ΠΎ ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ΅ΠΆΠΈΠΌ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π° ΠΊΠ»Π°ΡΠ° Π½Π°Π²Π΅Π΄Π½ΡΠΆ. Π£ΠΊΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ»Π°Π³Π° "ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅" Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠ»Π°Ρ ΡΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΡΠΌ ΠΊΠ»Π°ΡΠ°. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* β¦ */); $post->unknown = 'Π³ΡΠ΅ΡΠ½ΠΎ'; // ΠΡΠ΅ΡΠΊΠ°: ΠΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Post::$unknown
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ βtrueβ, βfalseβ ΠΈ βnullβ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ°Ρ ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° Π²Π°Π»ΠΈΠ΄Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Ρ ΡΠ»Π°Π³ Π·Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡΠ°Π·Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΠΡΠ΅Π΄ΠΈ βtrueβ, βfalseβ ΠΈ βnullβ ΠΌΠΎΠΆΠ΅Ρ Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°ΠΌΠΎ Π²ΡΠ² Π²ΡΡΠ·ΠΊΠ° Ρ Π΄ΡΡΠ³ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ βstring|falseβ), Π½ΠΎ ΡΠ΅Π³Π° ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΡΠ΄Π΅Π»Π½ΠΎ: function alwaysFalse(): false { return false ; }
- ΠΡΠΈΠ³ΡΡΠ΅Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π² ΠΈΠ·Ρ ΠΎΠ΄Π° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ΅ΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π³ΡΠ΅ΡΠΊΠ°. ΠΠ·ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Π»ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄ΠΎ ΡΡΠ»ΡΠ³ΠΈ Π½Π° ΡΡΠ΅ΡΠΈ ΡΡΡΠ°Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π·Π° ΡΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΎΡ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠΈΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΈΠΌΠ΅Π½Π°, ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°. ΡΠ΅ΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ($foo, #[\SensitiveParameter] $password, $baz) { Ρ Π²ΡΡΠ»Ρ Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ('ΠΡΠ΅ΡΠΊΠ°'); } test('foo', 'password', 'baz'); Π€Π°ΡΠ°Π»Π½Π° Π³ΡΠ΅ΡΠΊΠ°: ΠΠ΅ΡΠ»ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ΠΡΠ΅ΡΠΊΠ° Π² test.php:8 ΠΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ΅ΠΊΠ°: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} Ρ Π²ΡΡΠ»Π΅Π½ Π² test.php ΠΎΠ½Π»Π°ΠΉΠ½ 8
- ΠΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π² ΠΏΡΠΈΠ·Π½Π°ΡΠΈ (Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄). ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈΡΠ΅, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π² Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°, ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ ΡΡΠ΅Π· ΠΊΠ»Π°ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° (Π½ΠΎ Π½Π΅ ΠΈ ΡΡΠ΅Π· ΠΈΠΌΠ΅ΡΠΎ Π½Π° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°). ΡΠ΅ΡΡΠ° Foo { public const CONSTANT = 1; ΠΏΡΠ±Π»ΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ bar(): int { return self::CONSTANT; // Π€Π°ΡΠ°Π»Π½Π° Π³ΡΠ΅ΡΠΊΠ° } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ Π² Π΄ΠΈΠ·ΡΠ½ΠΊΡΠΈΠ²Π½Π°ΡΠ° Π½ΠΎΡΠΌΠ°Π»Π½Π° ΡΠΎΡΠΌΠ° (DNF, Disjunctive Normal Form), ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ (ΠΊΠΎΠ»Π΅ΠΊΡΠΈΠΈ ΠΎΡ Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠΈΠΏΠ°) ΠΈ ΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ (ΡΠΈΠΏΠΎΠ²Π΅, ΡΠΈΠΈΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Ρ ΠΏΠΎΠ΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΈΠΏΠΎΠ²Π΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } Π²ΡΡΠ½Π΅ $entity; }}
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΅ Π½ΠΎΠ²ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ βRandomβ Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΠΈ ΡΠΈΡΠ»Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΠΈ. ΠΠΎΠ΄ΡΠ»ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΎΠ±Π΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π²ΠΈ Π΄Π° ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΠΈ ΡΠΈΡΠ»Π°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠΈΠ²Π°, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΡΠ°, ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ ΡΠΌΠ΅ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠ°ΡΠΈΠ²ΠΈ ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅, ΠΈΠ·Π±ΠΎΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π·Π° ΠΌΠ°ΡΠΈΠ²ΠΈ, Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅. $rng = $is_production? Π½ΠΎΠ² Random\Engine\Secure() : Π½ΠΎΠ² Random\Engine\Mt19937(1234); $randomizer = Π½ΠΎΠ² 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}β; OK "ΠΠ΄ΡΠ°Π²Π΅ΠΉ $world"; OK "ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ ${world}"; ΠΡΡ Π²ΡΡΠ»Π΅Π½ΠΎ: ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ${} Π² Π½ΠΈΠ·ΠΎΠ²Π΅ Π΅ ΠΎΡΡ Π²ΡΡΠ»Π΅Π½ΠΎ
- Π§Π°ΡΡΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈΡΠ΅ callables, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΈ ΡΡΠ΅Π· "call_user_func($callable)" ΡΠ° ΠΎΡΡ Π²ΡΡΠ»Π΅Π½ΠΈ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π²ΡΠ² ΡΠΎΡΠΌΠ°ΡΠ° "$callable()": "self::method" "parent::method" "static :: method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar: :method "]
- ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° error_log_mode Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΊΡΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru