Π‘Π΅Ρ‚Π° тСстванСто Π½Π° PHP 8 Π·Π°ΠΏΠΎΡ‡Π½Π°

Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΎ ΠΎΡ‚ ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π±Π΅Ρ‚Π° вСрсия Π½Π° новия ΠΊΠ»ΠΎΠ½ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 8. ΠŸΡƒΡΠΊΠ°Π½Π΅Ρ‚ΠΎ Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΎ Π·Π° 26 Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‰ΠΈ вСрсии Π½Π° PHP 7.4.9, 7.3.21 ΠΈ
7.2.33, ΠΊΠΎΠΉΡ‚ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ уязвимости.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ PHP 8:

  • Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Ρ‰Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ производитСлността.
  • ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° Π½Π°ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° функцията, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚Π΅ стойности Π½Π° функцията във Π²Ρ€ΡŠΠ·ΠΊΠ° с ΠΈΠΌΠ΅Π½Π°Ρ‚Π°, Ρ‚.Π΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Ρ€Π΅Π΄ ΠΈ Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ Π½Π΅Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ. НапримСр β€žarray_fill(start_index: 0, num: 100, value: 50)β€œ.
  • ΠŸΡ€ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° β€œ?”, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Ρ‚Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ само Π°ΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π΅ Π½Π°Π»ΠΈΡ†Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ избягва Π½Π΅Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° стойността β€œnull”. НапримСр "$dateAsString = $booking->getStartDate()?->asDateTimeString()";
  • ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° Π²ΠΈΠ΄ΠΎΠ²Π΅ съюзи, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰ΠΈ ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚ΠΈΠΏΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€žΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π° функция foo(Foo|Bar $input): int|float;”).
  • ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ (Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ), ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ позволяват Π΄Π° ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°Ρ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ (ΠΊΠ°Ρ‚ΠΎ информация Π·Π° Ρ‚ΠΈΠΏ) към класовС, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ синтаксиса Π½Π° Docblock.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° изразяванС ΠΌΠ°Ρ‡, ΠΊΠΎΠΉΡ‚ΠΎ, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ switch, ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Ρ€ΡŠΡ‰Π° стойности, Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° условия Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅, Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стриктни сравнСния Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ Π½Π΅ изисква спСцификация β€žΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅β€œ.

    $Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ = ΠΌΠ°Ρ‡($Π²Ρ…ΠΎΠ΄) {
    0 => "Π·Π΄Ρ€Π°Π²Π΅ΠΉ",
    '1', '2', '3' => β€œΡΠ²ΡΡ‚β€,
    };

  • Π‘ΡŠΠΊΡ€Π°Ρ‚Π΅Π½ синтаксис Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π½Π° класовС, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ дСфиницията Π½Π° конструктор ΠΈ свойства.
  • Нов Ρ‚ΠΈΠΏ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ - статичСн.
  • Нов Ρ‚ΠΈΠΏ - смСсСн, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° опрСдСлянС Π΄Π°Π»ΠΈ Π΄Π°Π΄Π΅Π½Π° функция ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅.
  • изразяванС Ρ…Π²ΡŠΡ€Π»ΡΠΌ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
  • WeakMap Π·Π° създаванС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠΆΠ΅Ρ€Ρ‚Π²Π°Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅Π½ΡƒΠΆΠ½ΠΈ кСшовС).
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΈΠ·Ρ€Π°Π·Π° β€œ::class” Π·Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° get_class()).
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π² Π±Π»ΠΎΠΊΠ° catch Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ оставяйки запСтая слСд послСдния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π² списъка с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.
  • Нов интСрфСйс МоТС Π΄Π° сС Π½Π°Π½ΠΈΠΆΠ΅ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° всички Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΈ Π² Π½ΠΈΠ· (Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ __toString().
  • Нова функция str_contains(), опростСн Π°Π½Π°Π»ΠΎΠ³ Π½Π° strpos Π·Π° опрСдСлянС Π½Π° появата Π½Π° ΠΏΠΎΠ΄Π½ΠΈΠ·, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ str_starts_with() ΠΈ str_ends_with() Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° съвпадСния Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈ края Π½Π° Π½ΠΈΠ·.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° функция fdiv(), ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° опСрация Π·Π° Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π±Π΅Π· Π΄Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡƒΠ»Π°.
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Π½ Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅. НапримСр ΠΈΠ·Ρ€Π°Π·ΡŠΡ‚ β€žΠ΅Ρ…ΠΎ β€žΡΡƒΠΌΠ°:β€œ . $a + $b' ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° сС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°ΡˆΠ΅ ΠΊΠ°Ρ‚ΠΎ 'Π΅Ρ…ΠΎ ("сума: ". $a) + $b', Π° Π² PHP 8 Ρ‰Π΅ сС Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π° ΠΊΠ°Ρ‚ΠΎ 'Π΅Ρ…ΠΎ "сума: ". ($a + $b)'.
  • Π‘Ρ‚Π΅Π³Π½Π°Ρ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π°Ρ€ΠΈΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‡Π½ΠΈ ΠΈ Π±ΠΈΡ‚ΠΎΠ²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ "[] % [42]" ΠΈ "$object + 4" Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π°Ρ‚ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ°.
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΎ стабилСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° сортиранС, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π΅Π΄ΡŠΡ‚ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ стойности сС Π·Π°ΠΏΠ°Π·Π²Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ сСрии.
  • Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€