БпСстСтС 15% ΠΎΡ‚ всички хостинг услуги

ВСствай умСнията си ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠžΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° всСки хостинг ΠΏΠ»Π°Π½

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills Π—Π° Π½Π°Ρ‡Π°Π»ΠΎ
Заглавия
Администрация

Нови Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ подобрСния Π² 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.2PHP 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 ΠΌΠ°ΡΠΈΠ²ΡŠΡ‚ Π΅ списък Ρ‚ΠΎΠ³Π°Π²Π° ΠΈ само Ρ‚ΠΎΠ³Π°Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ:

  1. Π• ΠΏΡ€Π°Π·Π΅Π½, ΠΈΠ»ΠΈ
  2. ΠšΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ ΠΌΡƒ са послСдоватСлни Ρ†Π΅Π»ΠΈ числа, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ΠΈ ΠΎΡ‚ 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.1PHP 8.2PHP 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 deprecat

PHP 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. Π’ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° нСизмСняСми ΠΎΠ±Π΅ΠΊΡ‚ΠΈ-стойности напълно ТизнСспособни Π±Π΅Π· Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.