ΠΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² PHP 8.3: ΠΡΠ»Π΅Π½ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ
PHP 8.3 Π΅ ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΌΠΈΠ½ΠΎΡΠ½Π° Π²Π΅ΡΡΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ° PHP, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅, readonly ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΌΠ°ΡΠΈΠ²ΠΈ/Π½ΠΈΠ·ΠΎΠ²Π΅. ΠΠ·Π΄Π°Π΄Π΅Π½Π° Π½Π° 23 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ 2023 Π³., ΡΡ Π²ΡΠ²Π΅ΠΆΠ΄Π° ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅, json_validate(), array_is_list() ΡΡΡΠ²ΡΡΡΠ΅Π½ΡΡΠ²Π°Π½ΠΈΡ, Randomizer Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΡ ΠΈ Π΄ΡΠ»Π±ΠΎΠΊΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° readonly ΡΠ²ΠΎΠΉΡΡΠ²Π° β ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΡΠΊΠΎ Π²Π»ΠΈΡΡΡ Π²ΡΡΡ
Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΡΡΠ²ΡΡΠΈ.
ΠΠΊΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ PHP-Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Π² ΡΡΠ΅Π΄Π° Π·Π° VPS Π₯ΠΎΡΡΠΈΠ½Π³ ΠΈΠ»ΠΈ Dedicated ΡΡΡΠ²ΡΡ, ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π² PHP 8.3 Π½Π΅ Π΅ ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ β ΡΠΎ Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ°Π²ΠΊΠ° Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΠΈΠ·Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° ΠΌΡΠ»ΡΠ°Π»ΠΈΠ²ΠΈ ΡΠ΅Π³ΡΠ΅ΡΠΈΠΈ ΠΈ ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ PHP 8.2 ΠΈ PHP 8.3
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΠΏΠΈΠΌ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΎΠ±Ρ Π²Π°ΡΠ° Π½Π° ΡΠΎΠ²Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. PHP 8.3 Π½Π΅ Π΅ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Ρ Π½Π°ΡΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΠ°. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎ Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ Π·Π°ΠΏΡΠ»Π²Π° Π΄ΡΠ»Π³ΠΎΠ³ΠΎΠ΄ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅, ΡΠΊΡΠ΅ΠΏΠ²Π° JIT ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΈ Π΄ΠΎΠ±Π°Π²Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π»ΠΈ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. Π’Π°Π±Π»ΠΈΡΠ°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΡΡΠΏΠΎΡΡΠ°Π²Ρ Π½Π°ΠΉ-Π·Π½Π°ΡΠΈΠΌΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΈ Π² PHP 8.2.
| Π€ΡΠ½ΠΊΡΠΈΡ / ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ | PHP 8.2 | PHP 8.3 |
|---|---|---|
| Π’ΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ | ΠΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° | ΠΠ°ΠΏΡΠ»Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΎ |
json_validate() | ΠΠ΅ Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ | ΠΠ°Π»ΠΈΡΠ½ΠΎ Π½Π°ΡΠΈΠ²Π½ΠΎ |
| ΠΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° readonly ΡΠ²ΠΎΠΉΡΡΠ²Π° | ΠΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ | ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΎ ΡΡΠ΅Π· clone |
array_is_list() | ΠΠ°Π»ΠΈΡΠ½ΠΎ | ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π΅ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΎ, Π½ΠΎ Ρ ΠΏΠΎ-ΡΠΈΡΠΎΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ |
| ΠΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π½Π° ΠΊΠ»Π°Ρ | Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ° | ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΎ ΡΡΠ΅Π· ClassName::{$const} |
Randomizer::getBytesFromString() | ΠΠ΅ Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ | ΠΠ°Π»ΠΈΡΠ½ΠΎ |
Randomizer::getFloat() / nextFloat() | ΠΠ΅ Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ | ΠΠ°Π»ΠΈΡΠ½ΠΎ |
ΠΡΡΠΈΠ±ΡΡ #[Override] | ΠΠ΅ Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ | ΠΠ°Π»ΠΈΡΠ½ΠΎ |
ΠΡΡΠ°ΡΡΠ»ΠΎ: Π½Π΅ΡΠ²Π½ΠΎ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½Π°ΡΠ°Π»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° mt_rand | ΠΠ΅ Π΅ ΠΎΡΡΠ°ΡΡΠ»ΠΎ | ΠΡΡΠ°ΡΡΠ»ΠΎ |
| Ini Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° Π·Π° ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΡΠ΅ΠΊΠ° Π½Π° Fiber | ΠΠ΅ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΠΎ | ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ fiber.stack_size |
| ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° JIT ΡΡΠ°ΡΠΈΡΠ°Π½Π΅ΡΠΎ | ΠΠ°Π·ΠΎΠ²ΠΎ ΡΡΠ°ΡΠΈΡΠ°Π½Π΅ | ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ IR ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΈΠΊΠ»ΠΈ |
str_contains Ρ ΠΌΠ°ΡΠΈΠ²ΠΈ | ΠΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° | ΠΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° (Π³ΡΠ΅ΡΠΊΠ° Π² ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡ β Π²ΠΈΠΆΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ) |
> ΠΡΠΈΡΠΈΡΠ½Π° ΠΊΠΎΡΠ΅ΠΊΡΠΈΡ: ΠΠ·Ρ
ΠΎΠ΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΠ²ΡΡΠ΄ΠΈ, ΡΠ΅ str_contains() ΠΏΡΠΈΠ΅ΠΌΠ° ΠΌΠ°ΡΠΈΠ² ΠΎΡ Π½ΠΈΠ·ΠΎΠ²Π΅ Π² PHP 8.3. Π’ΠΎΠ²Π° Π΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π²ΡΡΠ½ΠΎ. str_contains() ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠ°ΠΌΠΎ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΎΡ ΡΠΈΠΏ Π½ΠΈΠ·. ΠΠΎΠ΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ°ΡΠΈΠ² ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° TypeError. ΠΡΠ°Π²ΠΈΠ»Π½ΠΈΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π·Π° ΡΡΡΡΠ΅Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π½ΠΈΠ· Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½ΠΈΠ·ΠΎΠ²Π΅ Π΅ array_filter() Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Ρ str_contains(), ΠΈΠ»ΠΈ in_array() Π·Π° ΡΠΎΡΠ½ΠΈ ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ.
JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π² PHP 8.3: ΠΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ
ΠΡΠ΅Π΄ΠΈΡΡΠΎΡΠΈΡ: ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ PHP JIT
JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π½Π° PHP, Π²ΡΠ²Π΅Π΄Π΅Π½ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π² PHP 8.0, ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° OPcache. Π’ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π³ΠΎΡΠ΅ΡΠΈ ΠΏΡΡΠΈΡΠ° Π½Π° Π±Π°ΠΉΡΠΊΠΎΠ΄ Π² Π½Π°ΡΠΈΠ²Π΅Π½ ΠΌΠ°ΡΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΉΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π½Π° Zend VM Π·Π° ΡΠ΅Π·ΠΈ ΠΏΡΡΠΈΡΠ°. PHP 8.3 ΡΠ΅ Π΄ΠΎΡΡΠ°Π²Ρ ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠ΅Π½ JIT Π±Π΅ΠΊΠ΅Π½Π΄, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ (IR), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
ΠΠΎΠ²ΠΈΡΡ IR-Π±Π°Π·ΠΈΡΠ°Π½ JIT Π² PHP 8.3 (ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΎΡ Dmitry Stogov) Π·Π°ΠΌΠ΅ΡΡΠ²Π° ΡΠ»ΠΎΡ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π½Π° ΠΏΠΎ-ΡΡΠ°ΡΠΈΡ ΡΡΠ°ΡΠΈΡΠ°Ρ JIT Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ SSA-ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅, Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΡΡΡΡΠ² ΠΊΠΎΠ΄ ΠΈ ΠΈΠ·Π΄ΠΈΠ³Π°Π½Π΅ Π½Π° ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΈ Π½Π° ΡΠΈΠΊΠ»ΠΈ β ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π±ΡΡ Π° ΡΡΡΡΠΊΡΡΡΠ½ΠΎ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°.
ΠΡΠ°Π²ΠΈΠ»Π½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° JIT
ΠΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡ ΠΏΠΎΠΊΠ°Π·Π²Π° php -d jit=on script.php, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π΅ΠΏΡΠ»Π½ΠΎ. JIT ΠΈΠ·ΠΈΡΠΊΠ²Π° OPcache Π΄Π° Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½. ΠΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° CLI Π±Π΅Π½ΡΠΌΠ°ΡΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ php.ini Π΅:
; php.ini
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=128M
opcache.jit=tracingΠΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π° ΡΠ΅Π± ΡΡΡΠ²ΡΡ (FPM ΠΈΠ»ΠΈ Apache mod_php), opcache.enable_cli Π΅ Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ opcache.jit_buffer_size ΡΡΡΠ±Π²Π° Π΄Π° Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ ΠΎΡ Π½ΡΠ»Π°, ΠΈΠ½Π°ΡΠ΅ JIT ΡΠ΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΠΌΡΠ»ΡΠ°Π»ΠΈΠ²ΠΎ. Π§Π΅ΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΠΊΠ»ΠΎΠΏΠΊΠ° Π΅ Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° jit_buffer_size=0 Π² ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ php.ini ΠΈ Π½Π΅Π΄ΠΎΡΠΌΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π°ΡΠΎ JIT Π½ΡΠΌΠ° Π΅ΡΠ΅ΠΊΡ.
ΠΠΎΠ³Π° JIT Π΄Π°Π²Π° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ
JIT Π½Π΅ Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½. ΠΠΎΠ»Π·ΠΈΡΠ΅ ΠΌΡ ΡΠ° ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠ°Π½ΠΈ Π² Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΠΎΡ CPU:
- ΠΠΈΡΠΎΠΊΠΎΡΠ΅Π½Π½ΠΈ ΡΠ΅Π»ΠΈ: ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈΠ·Π²ΠΎΠ΄ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅, Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° ΠΈΠ³ΡΠΈ, ΡΠΈΠΊΠ»ΠΈ Π·Π° ΠΏΠ°ΡΡΠ²Π°Π½Π΅ Π½Π° CSV/Π΄Π°Π½Π½ΠΈ, ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
- ΠΠΈΡΠΊΠΎΡΠ΅Π½Π½ΠΈ ΡΠ΅Π»ΠΈ: Π’ΠΈΠΏΠΈΡΠ½ΠΈ CRUD ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΡΠ½ΠΎΡΠΎ ΠΌΡΡΡΠΎ Π΅ I/O (Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΌΡΠ΅ΠΆΠ°). Π ΡΠ΅Π·ΠΈ ΡΠ»ΡΡΠ°ΠΈ ΡΠ΅ΠΆΠΈΠΉΠ½ΠΈΡΠ΅ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ Π½Π° JIT ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° ΠΌΠΎΠ³Π°Ρ Π»Π΅ΠΊΠΎ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠ°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Ρ ΠΏΡΠ΅Π½Π΅Π±ΡΠ΅ΠΆΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π°ΡΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ.
- ΠΡΡΠΈΡΠ°ΡΠ΅Π»Π½ΠΈ ΡΠ»ΡΡΠ°ΠΈ: ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΈ ΠΏΡΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ΄Π° (Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΠ΅ΠΉΠΌΡΡΡΡΠΈ Ρ ΡΠ΅ΠΆΠΊΠ° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ) ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΠΈΠ΄ΡΡ ΠΊΠ°ΠΊ JIT ΠΏΡΠ΅ΡΠΎΠ²Π°ΡΠ²Π° Π±ΡΡΠ΅ΡΠ°, ΠΏΡΠΈΡΠΈΠ½ΡΠ²Π°ΠΉΠΊΠΈ ΡΠ΅ΠΆΠΈΠΉΠ½ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ ΠΎΡ Π΄Π΅ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: ΠΏΡΡΠ²ΠΎ Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ Ρ opcache.jit=tracing. ΠΠΊΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ 3% ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ΅Π°Π»Π½ΠΎΡΠΎ ΡΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ JIT, Π·Π° Π΄Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° Π±ΡΡΠ΅ΡΠ° Π·Π° ΠΊΠ΅ΡΠ° Π½Π° ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° OPcache, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΎΡ ΠΏΠΎΠ»Π·Π° Π·Π° Π²ΡΠΈΡΠΊΠΈ PHP ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ.
Π’ΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅
Π’ΠΎΠ²Π° Π΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π°ΠΉ-Π·Π½Π°ΡΠΈΠΌΠΎΡΠΎ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅ Π² PHP 8.3 Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ΡΠ°Π²Π°
ΠΡΠ΅Π΄ΠΈ PHP 8.3 ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π½ΡΠΌΠ°Ρ Π° ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π΅Π½ ΡΠΈΠΏ. ΠΡΡΠ΅ΡΠ΅Π½ ΠΊΠ»Π°Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Ρ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΈΠΏ, ΠΈ PHP Π½ΡΠΌΠ°ΡΠ΅ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° Π³ΡΠ΅ΡΠΊΠ° Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ β ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠΎ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.
// PHP 8.2 β no type enforcement
interface StatusCode {
const SUCCESS = 200; // implicitly int
}
class BrokenStatus implements StatusCode {
const SUCCESS = "two hundred"; // silently accepted β a maintenance nightmare
}Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π² PHP 8.3
// PHP 8.3 β type is enforced at definition and inheritance
interface StatusCode {
const int SUCCESS = 200;
}
class BrokenStatus implements StatusCode {
const int SUCCESS = "two hundred";
// Fatal error: Cannot use string as value for typed class constant
// BrokenStatus::SUCCESS of type int
}ΠΡΠΈΡΠΊΠΈ ΡΠΊΠ°Π»Π°ΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ (int, float, string, bool), array, null, union ΡΠΈΠΏΠΎΠ²Π΅ ΠΈ intersection ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ° Π²Π°Π»ΠΈΠ΄Π½ΠΈ Π·Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ. Π’ΠΈΠΏΠΎΠ²Π΅ΡΠ΅ never ΠΈ void Π½Π΅ ΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ. Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ° ΡΠΈΡΡΠΎ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· ΠΊΠ°ΡΠΎ PHPStan ΠΈ Psalm, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ ΠΏΠΎ-ΡΡΡΠΎΠ³ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ Π±Π΅Π· ΡΠ΅ΠΆΠΈΠΉΠ½ΠΈ ΡΠ°Π·Ρ
ΠΎΠ΄ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π½Π° ΠΊΠ»Π°Ρ ΠΈ ΡΠ»Π΅Π½ Π½Π° Enum
PHP 8.3 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ ΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° enum Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ·ΡΠ°Π· ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ::{}.
class Direction {
const string NORTH = 'north';
const string SOUTH = 'south';
}
$direction = 'NORTH';
echo Direction::{$direction}; // outputs: northΠΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠ΅ constant() ΠΈΠ»ΠΈ ΠΈΠ·ΡΠ°Π· match, ΠΈ Π΄Π²Π°ΡΠ° ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΠΈ ΠΈ ΡΠΊΠ»ΠΎΠ½Π½ΠΈ ΠΊΡΠΌ Π³ΡΠ΅ΡΠΊΠΈ. ΠΠΎΠ²ΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠΈ ΠΈ Ρ enum:
enum Color {
case Red;
case Blue;
}
$name = 'Red';
$color = Color::{$name}; // Color::RedΠΡΠ°Π½ΠΈΡΠ΅Π½ ΡΠ»ΡΡΠ°ΠΉ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΡΡΠ΄ΡΡΠΆΠ° ΠΈΠΌΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΠΈΠ»ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π½Π° enum, PHP Ρ
Π²ΡΡΠ»Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Error β Π½Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΠ±Π²ΠΈΠΉΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈΡΠ΅ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½ΠΈΡ Π² Π±Π»ΠΎΠΊ try/catch ΠΈΠ»ΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°ΠΉΡΠ΅ Ρ defined() / enum_exists() ΠΏΡΠ΅Π΄ΠΈ ΡΠΏΠΎΡΡΠ΅Π±Π°.
Π€ΡΠ½ΠΊΡΠΈΡΡΠ° json_validate()
ΠΠ°ΡΠΎ ΡΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΡΠ΅Π΄Π°
ΠΡΠ΅Π΄ΠΈ PHP 8.3 ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈΡΡ Π½Π°ΡΠΈΠ½ Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° JSON Π½ΠΈΠ· Π±Π΅Π· Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΡ Π±Π΅ΡΠ΅:
json_decode($input);
$isValid = json_last_error() === JSON_ERROR_NONE;Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ° JSON Π² PHP ΡΡΡΡΠΊΡΡΡΠ°, Π·Π°Π΄Π΅Π»ΡΠΉΠΊΠΈ ΠΏΠ°ΠΌΠ΅Ρ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»Π½Π° Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΈΡ ΡΠΎΠ²Π°Ρ. ΠΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈ ΡΠ°ΠΌΠΎ Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ β API ΡΠ»ΡΠ·ΠΎΠ²Π΅, ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π° ΠΎΠΏΠ°ΡΠΊΠΈ Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ Π½Π° ΡΠ΅Π±Ρ ΡΠΊΠΎΠ²Π΅ β ΡΠΎΠ²Π° Π΅ ΡΠ°Π·ΡΠΎΡΠΈΡΠ΅Π»Π½ΠΎ.
ΠΠ°ΡΠΈΠ²Π½Π° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π² PHP 8.3
$payload = '{"user": "alex", "role": "admin"}';
if (json_validate($payload)) {
// safe to decode
$data = json_decode($payload, true);
}
// Invalid JSON
var_dump(json_validate('{invalid}')); // bool(false)json_validate() ΠΏΠ°ΡΡΠ²Π° JSON ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π±Π΅Π· Π΄Π° ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ° Π΄ΡΡΠ²ΠΎ ΠΎΡ PHP ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. ΠΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π΅ O(Π΄ΡΠ»Π±ΠΎΡΠΈΠ½Π°) Π²ΠΌΠ΅ΡΡΠΎ O(ΡΠ°Π·ΠΌΠ΅Ρ), ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎ ΠΏΡΠ°Π²ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΠΎΠ²Π°ΡΠΈ. Π’ΠΎΠΉ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΡΠΈΠ΅ΠΌΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ $depth ΠΈ $flags, ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠΈ Π½Π° json_decode().
Π Π΅Π°Π»Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°: ΠΠΎΠ»ΡΡΠ°ΡΠ΅Π» Π½Π° ΡΠ΅Π±Ρ
ΡΠΊΠΎΠ²Π΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ 50 000 Π·Π°ΡΠ²ΠΊΠΈ Π² ΠΌΠΈΠ½ΡΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° json_validate() Π·Π° ΠΎΡΡ
Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΠΎΠ²Π°ΡΠΈ Π½Π° ΡΡΠ±Π° ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π½Π°ΡΡΡΠΏΠΈ ΠΊΠ°ΠΊΠ²Π°ΡΠΎ ΠΈ Π΄Π° Π΅ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΉΠΊΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΡΠΈΡΠΊΠ° Π²ΡΡΡ
Ρ CPU ΠΈ ΠΏΠ°ΠΌΠ΅ΡΡΠ°.
Readonly ΡΠ²ΠΎΠΉΡΡΠ²Π°: ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π΄ΡΠ»Π±ΠΎΠΊΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅
PHP 8.2 Π²ΡΠ²Π΅Π΄Π΅ readonly ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π½ΠΎ Π³ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π΄ΠΎΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ. Π’ΠΎΠ²Π° ΠΏΡΠΈΠ½ΡΠ΄ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΊΡΠΌ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΈ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ β ΡΠ°Π±ΡΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ, Ρ Π°ΠΊΠΎΠ²Π΅ Π·Π° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΈΠ·ΡΡΠ»ΠΎ ΠΈΠ·ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° readonly Π·Π° ΠΎΠ±Π΅ΠΊΡΠΈ-ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ.
PHP 8.3 ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π° ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ __clone() Π²Π΅ΡΠ΅ Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ Π΄Π° ΠΏΡΠ΅ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π° readonly ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅.
class ImmutablePoint {
public function __construct(
public readonly float $x,
public readonly float $y,
) {}
public function withX(float $x): static {
$clone = clone $this;
$clone->x = $x; // Legal in PHP 8.3 within __clone context
return $clone;
}
}
$point = new ImmutablePoint(1.0, 2.0);
$moved = $point->withX(5.0);
echo $moved->x; // 5.0
echo $point->x; // 1.0 β original unchangedΠ’ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» Π΅ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°Ρ Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ-ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π² Domain-Driven Design. ΠΠ΅Π· Π½Π΅Π³ΠΎ readonly Π±Π΅ΡΠ΅ Π΄ΠΎ Π³ΠΎΠ»ΡΠΌΠ° ΡΡΠ΅ΠΏΠ΅Π½ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΈΠ²Π΅Π½ Π·Π° ΡΠ»ΠΎΠΆΠ½ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
ΠΡΡΠΈΠ±ΡΡΡΡ #[Override]
ΠΡΡΠΈΠ±ΡΡΡΡ #[Override] ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π½Π° PHP (ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·), ΡΠ΅ Π΄Π°Π΄Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° Π·Π°ΠΌΠ΅ΡΡΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΊΠ»Π°Ρ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΊΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°, PHP Ρ
Π²ΡΡΠ»Ρ Π³ΡΠ΅ΡΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
class Base {
public function process(): void {}
}
class Child extends Base {
#[Override]
public function process(): void {
// If Base::process() is renamed or removed, this becomes a fatal error
}
}Π’ΠΎΠ²Π° Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΠ΅Π½Π½ΠΎ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ Π΅ΠΊΠΈΠΏΠΈ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π±Π°Π·ΠΎΠ² ΠΊΠ»Π°Ρ ΠΌΠΎΠΆΠ΅ ΠΌΡΠ»ΡΠ°Π»ΠΈΠ²ΠΎ Π΄Π° Π½Π°ΡΡΡΠΈ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π² Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅. ΠΡΡΠΈΠ±ΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²Π° ΠΊΠ°ΡΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΡΠ»Π°Π²ΡΠΉΠΊΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠ΅ ΠΏΡΠΎΡΠ²ΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΡΠ΅Π· ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·.
array_is_list() ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΠΊΠ»Π°ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΌΠ°ΡΠΈΠ²ΠΈ
array_is_list() Π±Π΅ΡΠ΅ Π²ΡΠ²Π΅Π΄Π΅Π½ Π² PHP 8.1, Π½Π΅ Π² 8.3. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡΠ΅ ΠΌΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π·Π°ΡΠ»ΡΠΆΠ°Π²Π°Ρ ΡΠΎΡΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΠ΅ΡΡΠΎ ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ° ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎ.
PHP ΠΌΠ°ΡΠΈΠ²ΡΡ Π΅ ΡΠΏΠΈΡΡΠΊ ΡΠΎΠ³Π°Π²Π° ΠΈ ΡΠ°ΠΌΠΎ ΡΠΎΠ³Π°Π²Π°, ΠΊΠΎΠ³Π°ΡΠΎ:
- Π ΠΏΡΠ°Π·Π΅Π½, ΠΈΠ»ΠΈ
- ΠΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΌΡ ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π°, Π·Π°ΠΏΠΎΡΠ²Π°ΡΠΈ ΠΎΡ
0Π±Π΅Π· ΠΏΡΠΎΠΏΡΡΠΊΠΈ.
var_dump(array_is_list([])); // bool(true)
var_dump(array_is_list([0 => 'a', 1 => 'b'])); // bool(true)
var_dump(array_is_list(['a', 'b', 'c'])); // bool(true)
var_dump(array_is_list([1 => 'a', 0 => 'b'])); // bool(false) β wrong order
var_dump(array_is_list([0 => 'a', 2 => 'b'])); // bool(false) β gap at index 1
var_dump(array_is_list(['key' => 'value'])); // bool(false) β string keyΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: ΠΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ JSON, array_is_list() ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄Π°Π»ΠΈ ΠΈΠ·Ρ
ΠΎΠ΄ΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ JSON ΠΌΠ°ΡΠΈΠ² ([]) ΠΈΠ»ΠΈ JSON ΠΎΠ±Π΅ΠΊΡ ({}). ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ ΠΏΡΠ΅Π΄ΠΈ json_encode() ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° ΡΠ»ΡΡΠ°ΠΉΠ½Π° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ°ΡΠΎ ΠΎΠ±Π΅ΠΊΡ Π½Π° ΡΠΈΡΠ»ΠΎΠ²ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ΠΈ ΠΌΠ°ΡΠΈΠ²ΠΈ, ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π°ΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ.
ΠΠΎΠ²ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π° Randomizer Π² PHP 8.3
ΠΠ»Π°ΡΡΡ RandomRandomizer, Π²ΡΠ²Π΅Π΄Π΅Π½ Π² PHP 8.2, ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΡΠΈ Π²Π°ΠΆΠ½ΠΈ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΡ:
getBytesFromString()
$randomizer = new RandomRandomizer();
$token = $randomizer->getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16);
echo $token; // e.g., "k3mz9xqp1wvn7yt2"Π’ΠΎΠ²Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠΈ Π·Π°ΡΠΈΡΠ΅Π½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π½ΠΈΠ·, ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ ΠΎΡ Π·Π°Π΄Π°Π΄Π΅Π½Π° Π°Π·Π±ΡΠΊΠ° β ΠΌΠΎΠ΄Π΅Π», Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΠΊΠ΅Π½ΠΈ, OTP ΠΊΠΎΠ΄ΠΎΠ²Π΅ ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° slug. ΠΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠ΅ ΡΡΡΠ΅Π½ ΡΠΈΠΊΡΠ» Ρ random_int().
getFloat() ΠΈ nextFloat()
$randomizer = new RandomRandomizer();
// Returns a float in [0.0, 1.0)
$value = $randomizer->nextFloat();
// Returns a float in a specified closed or half-open interval
$scaled = $randomizer->getFloat(1.5, 9.5, RandomIntervalBoundary::ClosedOpen);getFloat() ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° Ξ³-section Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ Π½Π° ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΠ° Π·Π°ΠΏΠ΅ΡΠ°Ρ Π±Π΅Π· ΠΌΠΎΠ΄ΡΠ»Π½ΠΎΡΠΎ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π·Π°ΡΡΠ³Π° Π½Π°ΠΈΠ²Π½ΠΈΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π·Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠ½ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ ΠΈ A/B ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΡΠ΅ΠΉΠΌΡΡΡΡΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΡΡΠ°ΡΠ΅Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½ΠΈΡ Π² PHP 8.3
Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π° ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ, Π΅ ΡΡΡΠΎ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΈ Π·Π½Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ. ΠΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π³Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΡΠ°ΡΠ°Π»Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² PHP 9.0.
| ΠΡΡΠ°ΡΡΠ»Π° ΡΡΠ½ΠΊΡΠΈΡ | ΠΡΠΈΡΠΈΠ½Π° | ΠΡΡ Π·Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ |
|---|---|---|
ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° mt_rand() Π±Π΅Π· ΡΠ²Π½Π° Π½Π°ΡΠ°Π»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π² Π½ΡΠΊΠΎΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΈ | ΠΠ΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΈ Π½Π΅ΡΠ²Π½ΠΎ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½Π°ΡΠ°Π»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ | ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ RandomRandomizer |
ReflectionProperty::setValue() Π±Π΅Π· ΠΎΠ±Π΅ΠΊΡ Π²ΡΡΡ
Ρ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅Π½ | ΠΠ΅ΡΡΠ½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ | ΠΠΎΠ΄Π°ΠΉΡΠ΅ ΡΠ΅Π»Π΅Π²ΠΈΡ ΠΎΠ±Π΅ΠΊΡ ΠΈΠ·ΡΠΈΡΠ½ΠΎ |
ΠΠΎΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»Π΅Π½ $widths Π½Π° mb_strimwidth() | ΠΠ΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ | ΠΠ°Π»ΠΈΠ΄ΠΈΡΠ°ΠΉΡΠ΅ Π²Ρ ΠΎΠ΄Π° ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ |
ldap_connect() Ρ ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π·Π° Ρ
ΠΎΡΡ/ΠΏΠΎΡΡ | ΠΡΡΠ°ΡΡΠ»ΠΎ Π² ΠΏΠΎΠ»Π·Π° Π½Π° URI ΡΠΎΡΠΌΠ° | ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ URI Π½ΠΈΠ· ldap://host:port |
range() Ρ Π½Π΅ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π° ΡΡΡΠΏΠΊΠ°, ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°ΡΠ° ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΠ° Π·Π°ΠΏΠ΅ΡΠ°Ρ | ΠΠ·Π½Π΅Π½Π°Π΄Π²Π°ΡΠΎ Π½Π΅ΡΠ²Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ | ΠΠ·ΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΉΡΠ΅ ΡΡΡΠΏΠΊΠ°ΡΠ° ΠΊΡΠΌ float |
ΠΠ΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°: PHP 8.3 ΡΡΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ
ΠΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ ΠΎΡ Kinsta, Phoronix ΠΈ Π΅ΠΊΠΈΠΏΠ° Π½Π° PHP internals, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Symfony Demo, WordPress ΠΈ ΡΠΈΡΡΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Ρ Fibonacci/ΡΠΎΡΡΠΈΡΠ°Π½Π΅:
| ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ | PHP 8.1 | PHP 8.2 | PHP 8.3 |
|---|---|---|---|
| Symfony Demo (Π·Π°ΡΠ²ΠΊΠΈ/ΡΠ΅ΠΊ) | ~1 450 | ~1 520 | ~1 610 |
| WordPress (Π·Π°ΡΠ²ΠΊΠΈ/ΡΠ΅ΠΊ) | ~1 180 | ~1 240 | ~1 290 |
| Fibonacci (JIT, ΠΌΡ) | ~48 | ~44 | ~38 |
| Mandelbrot (JIT, ΠΌΡ) | ~210 | ~195 | ~170 |
| Π‘Π°ΠΌΠΎ OPcache (Π±Π΅Π· JIT) | ΠΠ°Π·ΠΎΠ²Π° Π»ΠΈΠ½ΠΈΡ | +5% | +8% |
ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ, Π½ΠΎ Π½Π΅ Π΄ΡΠ°ΠΌΠ°ΡΠΈΡΠ½ΠΈ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΠΎΡ I/O. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° Π½Π° JIT Π² PHP 8.3 ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ Π½Π°ΠΉ-Π·Π½Π°ΡΠΈΠΌΠ°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΏΡΠΈ ΡΠΈΡΡΠΈ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ β Π΄ΠΎ 18% ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΎΡ PHP 8.2 ΠΏΡΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° Mandelbrot.
ΠΠ°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π΄ΠΎ PHP 8.3: ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΡΡΡΠ²ΡΡΠ°
ΠΠΊΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΡΡΡΠ²ΡΡΠ½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° β Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ Π½Π° VPS Ρ cPanel ΠΈΠ»ΠΈ Π½Π° bare-metal Dedicated ΡΡΡΠ²ΡΡ β ΡΠ»Π΅Π΄Π²Π°ΠΉΡΠ΅ ΡΠ°Π·ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΏΡΠ΅Π΄ΠΈ Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΡΠ΅Π΄ΠΈ.
Π‘ΡΡΠΏΠΊΠΈ ΠΏΡΠ΅Π΄ΠΈ Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅
- ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅
composer outdatedΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ Ρ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ PHP 8.3. - ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅
php -d error_reporting=E_ALL your_app_entrypoint.phpΠΏΠΎΠ΄ PHP 8.3 CLI, Π·Π° Π΄Π° ΡΠ°Π·ΠΊΡΠΈΠ΅ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠΈΡ Π·Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΡΡΠ°Π½Π°Ρ ΡΠ°ΡΠ°Π»Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ. - ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π·Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°
str_contains(),str_starts_with()ΠΈΠ»ΠΈstr_ends_with()Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΡ Π½ΠΈΠ·ΠΎΠ²Π΅ β ΡΠ΅ Π²Π΅ΡΠ΅ Ρ Π²ΡΡΠ»ΡΡTypeErrorΠ² ΡΡΡΠΎΠ³ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΈ. - ΠΡΠ΅Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Ρ β ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½ΡΡ ΡΠ°ΡΠ°Π»Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ, Π°ΠΊΠΎ ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ° Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈ.
- ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΠΈΠ·Ρ
ΠΎΠ΄Π° Π½Π°
phpinfo()ΡΠ»Π΅Π΄ Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, Π·Π° Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅, ΡΠ΅ OPcache ΠΈ JIT ΡΠ° Π°ΠΊΡΠΈΠ²Π½ΠΈ Ρ ΠΎΡΠ°ΠΊΠ²Π°Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° php.ini Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΡΠ΅Π΄Π° Ρ PHP 8.3
; Recommended production baseline for PHP 8.3
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.jit=tracing
opcache.jit_buffer_size=64MΠΠ°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° validate_timestamps=0 Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΡΠΈ Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° β ΠΎΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½ΠΈΡ Ρ Π³ΠΎΠ»ΡΠΌ ΡΡΠ°ΡΠΈΠΊ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΠΆΠΈΠΉΠ½ΠΈΡΠ΅ ΡΠ°Π·Ρ
ΠΎΠ΄ΠΈ Π·Π° ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° OPcache ΡΠ° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ deployment hooks Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° opcache_reset() ΡΠ»Π΅Π΄ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄.
ΠΠ°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ ΡΠ»Π΅Π΄ Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅
# Verify active PHP version
php -v
# Confirm JIT is compiled in and active
php -r "var_dump(opcache_get_status()['jit']);"
# Check for deprecation notices in error log
tail -f /var/log/php-fpm/error.log | grep -i deprecatPHP 8.3 ΠΈ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°
PHP 8.3 Π½Π΅ Π²ΡΠ²Π΅ΠΆΠ΄Π° Π½ΠΎΠ²ΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, Π½ΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ°Ρ ΠΊΠΎΡΠ²Π΅Π½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°:
json_validate()Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΏΠΎΠ²ΡΡΡ Π½ΠΎΡΡΡΠ° Π·Π° Π°ΡΠ°ΠΊΠ° Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈΡΠ΅ Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π°ΠΉΠΊΠΈ Π΄ΠΎΡΡΠΈΠ³Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½ JSON Π΄ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.- Π’ΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π°Ρ Π°ΡΠ°ΠΊΠΈ Π·Π° ΠΎΠ±ΡΡΠΊΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»Π°Ρ Π·Π°ΠΌΠ΅ΡΡΠ²Π° Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ ΡΠΈΠΏ Π·Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°, ΡΠ²ΡΡΠ·Π°Π½Π° ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° (Π½Π°ΠΏΡ. Π½ΠΈΠ²ΠΎ Π½Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΡΠ°ΠΉΠΌΠ°ΡΡ).
- ΠΡΡΠΈΠ±ΡΡΡΡ
#[Override]ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° ΠΌΡΠ»ΡΠ°Π»ΠΈΠ²ΠΎΡΠΎ Π·Π°ΡΠ΅Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π² Π±Π°Π·ΠΎΠ²ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅, ΠΊΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° β Π²Π΅ΠΊΡΠΎΡ Π·Π° ΡΠΈΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π΅ΡΠΊΠ°Π»Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ Ρ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ. - ΠΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΡΡΠ° ΠΊΡΠΌ
RandomRandomizerΠ·Π°ΠΌΠ΅ΡΡΠ²Π°Ρ Π½Π΅ΡΠΈΠ³ΡΡΠ½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ°ΡΠΎsubstr(str_shuffle(implode(range('a','z'))), 0, 16)Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΠΊΠ΅Π½ΠΈ.
ΠΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΡΡΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° PHP 8.3 Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ TLS ΡΡΠ΅ΠΊ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ. ΠΠΊΠΎ Π²Π°ΡΠ°ΡΠ° Ρ ΠΎΡΡΠΈΠ½Π³ ΡΡΠ΅Π΄Π° Π²ΡΠ΅ ΠΎΡΠ΅ Π½ΡΠΌΠ° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ Π°ΠΊΡΡΠ°Π»Π½ΠΈ SSL ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ, Π°Π΄ΡΠ΅ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΠΈ Π²ΡΡΠΊΠΎ Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° PHP.
ΠΠ·Π±ΠΎΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° Ρ ΠΎΡΡΠΈΠ½Π³ ΡΡΠ΅Π΄Π° Π·Π° PHP 8.3
JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π½Π° PHP 8.3 ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΏΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ ΠΎΠ·Π½Π°ΡΠ°Π²Π°Ρ, ΡΠ΅ ΡΡΠ΅Π΄ΠΈ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΡ Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ.
- Π‘ΠΏΠΎΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡΠΈΠ½Π³: ΠΠ°Π»ΠΈΡΠ½ΠΎΡΡΡΠ° Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° PHP Π·Π°Π²ΠΈΡΠΈ ΠΈΠ·ΡΡΠ»ΠΎ ΠΎΡ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ PHP 8.3 Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ, ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ Π·Π° Π‘ΠΏΠΎΠ΄Π΅Π»Π΅Π½ ΡΠ΅Π± Ρ ΠΎΡΡΠΈΠ½Π³ Ρ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° PHP Π²ΠΈ Π΄Π°Π²Π°Ρ Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡ Π±Π΅Π· ΡΠ΅ΠΆΠΈΠΉΠ½ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠ°.
- VPS: ΠΡΠ»Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ
Ρ
php.ini, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° PHP-FPM ΠΏΡΠ»Π°, Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° OPcache ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° JIT Π±ΡΡΠ΅ΡΠ°. Π’ΠΎΠ²Π° Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΏΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½Π° ΡΡΠ΅Π΄Π° Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½ΠΈΡ Π½Π° PHP 8.3 Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ JIT. - Dedicated ΡΡΡΠ²ΡΡΠΈ: ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π³ΠΎΠ»ΡΠΌ ΡΡΠ°ΡΠΈΠΊ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡΡΠ° Π·Π° JIT Π±ΡΡΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ PHP-FPM ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ° Π² ΡΠ΅ΡΠ½ΠΎ ΠΌΡΡΡΠΎ. Dedicated ΡΡΠ΅Π΄Π°ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΡΠΎ NUMA-ΡΡΠΎΠ±ΡΠ°Π·Π΅Π½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π·Π° OPcache.
- GPU Ρ ΠΎΡΡΠΈΠ½Π³: Π Π΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎ, Π°ΠΊΠΎ Π²Π°ΡΠ΅ΡΠΎ PHP ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ΅ΡΡΡΠΈΡΠ° GPU-ΡΡΠΊΠΎΡΠ΅Π½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡ. ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Python ML inference ΡΡΠ»ΡΠ³ΠΈ). Π‘ΡΠ΅Π΄ΠΈΡΠ΅ Π·Π° GPU Ρ ΠΎΡΡΠΈΠ½Π³ ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ FFI ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π² PHP 8.3.
ΠΠ»ΡΡΠΎΠ²ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΡΠ° Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ, Π°ΠΊΠΎ:
- ΠΠ°ΡΠ°ΡΠ° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ ΠΈΠ»ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Ρ.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ PHPStan Π½ΠΈΠ²ΠΎ 8 ΠΈΠ»ΠΈ Psalm β ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ ΠΎΡΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΠΎ-ΡΡΡΠΎΠ³ Π°Π½Π°Π»ΠΈΠ·.
ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ JIT, Π°ΠΊΠΎ:
- ΠΠ°ΡΠΈΡΡ ΠΏΡΠΎΡΠ°ΠΉΠ»ΡΡ ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ CPU Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π°Π΄Π²ΠΈΡΠ°Π²Π° 40% ΠΎΡ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°.
- ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Π² PHP.
- Π Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΡΠ΅ Ρ ΠΏΠΎΠ½Π΅ 64 MB dedicated OPcache JIT Π±ΡΡΠ΅Ρ Π½Π° PHP-FPM ΠΏΡΠ».
ΠΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ JIT, Π°ΠΊΠΎ:
- ΠΠ°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ ΠΎΡ I/O (Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ΅Ρ, ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°, API ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΠ°Ρ Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΡΠ°).
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡΠΈΠ½Π³ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π·Π° OPcache.
- ΠΠ΅ ΡΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΡΠΎ ΡΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ β Π½Π΅ ΠΏΡΠΈΠ΅ΠΌΠ°ΠΉΡΠ΅ Π½ΠΈΡΠΎ Π·Π° Π΄Π°Π΄Π΅Π½ΠΎΡΡ.
ΠΡΠΈΠ΅ΠΌΠ΅ΡΠ΅ json_validate(), Π°ΠΊΠΎ:
- ΠΠ°Π»ΠΈΠ΄ΠΈΡΠ°ΡΠ΅ JSON ΠΏΡΠ΅Π΄ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ Π² ΠΊΠΎΠ΄ΠΎΠ²Π°ΡΠ° ΡΠΈ Π±Π°Π·Π°.
- ΠΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ ΡΠ΅Π±Ρ ΡΠΊ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΠΎΠ²Π°ΡΠΈ ΠΎΡ ΠΎΠΏΠ°ΡΠΊΠΈ Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ Π³ΠΎΠ»ΡΠΌ ΠΎΠ±Π΅ΠΌ.
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ #[Override] ΠΊΡΠΌ:
- ΠΡΠ΅ΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π² Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΊΠ»Π°Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ Π·Π°ΠΌΠ΅ΡΡΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΊΠ»Π°Ρ.
- ΠΠ°ΠΌΠ΅ΡΡΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΠΊΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°, Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ Ρ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ ΠΈΠ»ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ.
ΠΠΈΠ³ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΡΠΌ RandomRandomizer, Π°ΠΊΠΎ:
- ΠΡΠΊΠΎΡ ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° Π²ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°
rand(),mt_rand(),array_rand()ΠΈΠ»ΠΈstr_shuffle()Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΠΊΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°.
Π§ΠΠ
ΠΠ°ΡΡΡΠ°Π²Π° Π»ΠΈ PHP 8.3 ΠΎΠ±ΡΠ°ΡΠ½Π°ΡΠ° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΠΊΠΎΠ΄ Π·Π° PHP 8.2?
Π ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ β Π½Π΅. PHP 8.3 Π΅ ΠΌΠΈΠ½ΠΎΡΠ½Π° Π²Π΅ΡΡΠΈΡ Π±Π΅Π· ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ Π² 8.2. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π½ΠΎΠ²ΠΎΠΎΡΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΠΈΠ·Π²Π΅ΡΡΠΈΡ E_DEPRECATED, Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠ΄, ΡΠ°Π·ΡΠΈΡΠ°Ρ Π½Π° Π½Π΅ΡΠ²Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ ΠΈΠ»ΠΈ range() Ρ ΠΏΠ»Π°Π²Π°ΡΠΈ ΡΡΡΠΏΠΊΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄ΡΡΠΆΠΈ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½. ΠΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΈΡ ΡΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΠΎΠ΄ PHP 8.3 ΠΏΡΠ΅Π΄ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅.
ΠΠΊΡΠΈΠ²ΠΈΡΠ°Π½ Π»ΠΈ Π΅ JIT ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π² PHP 8.3?
ΠΠ΅. JIT ΠΈΠ·ΠΈΡΠΊΠ²Π° OPcache Π΄Π° Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ ΠΈ opcache.jit_buffer_size Π΄Π° Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΡΠ°Π·Π»ΠΈΡΠ½Π° ΠΎΡ Π½ΡΠ»Π°. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΡ php.ini, Π΄ΠΎΡΡΠ°Π²ΡΠ½ Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ, Π·Π°Π΄Π°Π²Π° opcache.jit_buffer_size=0, ΠΊΠΎΠ΅ΡΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ° JIT. Π’ΡΡΠ±Π²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅.
ΠΠΎΠ³Π° Π»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ Ρ union ΡΠΈΠΏΠΎΠ²Π΅ Π² PHP 8.3?
ΠΠ°. const int|string VERSION = 8; Π΅ Π²Π°Π»ΠΈΠ΄Π½ΠΎ. Intersection ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠΎ ΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ ΠΎΡ ΠΎΠ±Π΅ΠΊΡΠ΅Π½ ΡΠΈΠΏ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΠ΅ Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ° void ΠΈ never.
ΠΠ°ΠΊΠ²Π° Π΅ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ json_validate() ΠΈ json_decode() Π·Π° ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ?
json_validate() ΠΏΠ°ΡΡΠ²Π° JSON ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π±Π΅Π· Π΄Π° ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ° PHP ΡΡΠΎΠΉΠ½ΠΎΡΡ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°. Π’ΠΎΠΉ Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ ΠΎΡΠΊΡΠΌ ΠΏΠ°ΠΌΠ΅Ρ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΠΎΠ²Π°ΡΠΈ ΠΈ ΠΏΠΎ-Π±ΡΡΠ·, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅ ΡΡΡΡΠΊΡΡΡΠ½Π°ΡΠ° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ. json_decode() ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ β Π½Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΉΡΠ΅ ΠΈ Π΄Π²Π΅ΡΠ΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ; ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΉΡΠ΅ json_validate() ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠ·Π½Π°ΠΌΠ΅ΡΡΠ²Π°ΡΠ΅ Π΄Π° ΠΈΠ·Ρ
Π²ΡΡΠ»ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°.
ΠΠΎΠ΄Π΄ΡΡΠΆΠ° Π»ΠΈ PHP 8.3 readonly ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅, Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈ Π² PHP 8.2?
ΠΠ°, ΠΈ Π³ΠΈ ΡΠ°Π·ΡΠΈΡΡΠ²Π°. PHP 8.3 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° readonly ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Π½ΠΈ Π² __clone(), ΠΊΠΎΠ΅ΡΠΎ Π±Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° readonly ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ Π² PHP 8.2. Π’ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π½Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ-ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΈ Π±Π΅Π· Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΡΠ»ΡΠ³ΠΈ