ИзданиС Psalm 3.12, статичСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π·Π° PHP. Алфа вСрсия PHP 8.0

Компания Vimeo Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π»Π° новият Π±Ρ€ΠΎΠΉ Π½Π° статичния Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Psalm 3.12, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡƒΠ»ΠΎΠ²ΠΈΠΌΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΊΠΎΠ΄Π° Π½Π° PHP, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° някои Π²ΠΈΠ΄ΠΎΠ²Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ. БистСмата Π΅ подходяща Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π² остарял ΠΊΠΎΠ΄, Ρ‚Π°ΠΊΠ° ΠΈ Π² ΠΊΠΎΠ΄, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, появили сС Π² Π½ΠΎΠ²ΠΈΡ‚Π΅ вСрсии Π½Π° PHP. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ написан Π½Π° PHP ΠΈ сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π· MIT.

Psalm опрСдСля голяма част ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π° ΡΡŠΡ‰ΠΎ ΠΈ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ. НапримСр, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° прСдупрСТдСния Π·Π° смСсванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² ΠΈΠ·Ρ€Π°Π·ΠΈ, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ логичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (ΠΊΠ°Ρ‚ΠΎ β€žif ($a && $a) {}β€œ, β€žif ($a && !$a) {}β€œ ΠΈ β€žif ($a) {} elseif ($a) {}β€œ), нСпълна инициализация Π½Π° свойства Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. ΠΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ сС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ само Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ ΠΎΡ‚ послСдната ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°.

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ сС прСдоставят срСдства Π·Π° бСзопасно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ позволяват ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Docblock (β€ž/** @var Type */β€œ) Π·Π° прСдоставянС Π½Π° информация Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π²Ρ€ΡŠΡ‰Π°Π½ΠΈΡ‚Π΅ стойности, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ свойствата Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° шаблони Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ assert. НапримСр:

/** @var string|null */
$a = foo();

/** @var string $a */
echo strpos($a, β€˜hello’);

/** @psalm-assert-if-true B $a */
function isValidB(A $a) : bool {
return $a instanceof B && $a->isValid();
}

Π—Π° автоматизация Π½Π° отстраняванС Π½Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ сС прСдоставя ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ Psalter, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° плъгини ΠΈ позволява отстранява Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² ΠΊΠΎΠ΄Π°, добавя Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ прСмСстванС Π½Π° класовС ΠΎΡ‚ Π΅Π΄Π½ΠΎ пространство Π½Π° ΠΈΠΌΠ΅Π½Π° Π² Π΄Ρ€ΡƒΠ³ΠΎ, прСмСстванС Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ класовСтС, ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅ Π½Π° класовС ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ.

Π’ новия Π±Ρ€ΠΎΠΉ Π½Π° Psalm Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° опцията «—taint-analysis», която позволява прослСдяванС Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ потрСбитСля (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, $_GET[‘name’]), ΠΈ тяхното ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° мСста, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅ΠΊΡ€Π°Π½Π²Π°Π½Π΅ Π½Π° символи (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, echo «<h1>$name</h1>»), Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‡Ρ€Π΅Π· прослСдяванС Π½Π° Π²Π΅Ρ€ΠΈΠ³ΠΈ ΠΎΡ‚ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ присвоявания ΠΈ извиквания Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ опасни Π΄Π°Π½Π½ΠΈ сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° асоциативни масиви $_GET, $_POST ΠΈ $_COOKIE, Π½ΠΎ Π΅ възмоТно ΠΈ опрСдСлСния собствСни ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ. ΠžΡ‚ дСйствията, изискващи прослСдяванС Π½Π° Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅, Π²ΠΎΠ΄Π΅Ρ‰ΠΈ Π΄ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π² HTML Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, добавянС Π½Π° HTTP Π·Π°Π³Π»Π°Π²ΠΊΠΈ ΠΈΠ»ΠΈ изпълнСниС Π½Π° SQL заявки.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ echo, exec, include ΠΈ header. ΠŸΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° нСобходимостта ΠΎΡ‚ Π΅ΠΊΡ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π΅ сС Π²Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ тСкст, SQL Π½ΠΈΠ·ΠΎΠ²Π΅, HTML ΠΈ Shell ΠΊΠΎΠ΄, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° удостовСряванС. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚ Ρ€Π΅ΠΆΠΈΠΌ позволява ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° уязвимости Π² ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ водят Π΄ΠΎ крос-сайтови скриптовС (XSS) ΠΈΠ»ΠΈ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° SQL ΠΊΠΎΠ΄.

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС отбСлязано Π½Π°Ρ‡Π°Π»ΠΎ Π°Π»Ρ„Π° тСстванС Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° вСрсия PHP 8.0. ΠŸΡƒΡΠΊΠ°Π½Π΅Ρ‚ΠΎ Π΅ насрочСно Π·Π° 26 Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ. Π’ Π½ΠΎΠ²Π°Ρ‚Π° вСрсия сС ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‚ нововъвСдСния, ΠΊΠ°Ρ‚ΠΎ:

  • Π’ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°, чиято ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Ρ‰Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ производитСлността.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΈΡ‚ΠΎ опрСдСлят ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚ΠΈΠΏΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Β«public function foo(Foo|Bar $input): int|float;Β»).
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ (Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ), ΠΊΠΎΠΈΡ‚ΠΎ позволяват ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ информация Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅) с класовСтС Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° синтаксис Π½Π° Docblock.
  • Π‘ΡŠΠΊΡ€Π°Ρ‚Π΅Π½ синтаксис Π·Π° опрСдСлянС Π½Π° класовС, позволяващ обСдиняванС Π½Π° дСфиницията Π½Π° конструктора ΠΈ свойствата.
  • Нов Ρ‚ΠΈΠΏ Π²ΡŠΡ€Π½Π°Ρ‚ΠΈ стойности β€” static.
  • Нов Ρ‚ΠΈΠΏ β€” mixed, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° опрСдСлянС Π½Π° функция, ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‰Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅.
  • Π˜Π·Ρ€Π°Π· throw Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
  • WeakMap Π·Π° създаванС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΆΠ΅Ρ€Ρ‚Π²Π° ΠΏΡ€ΠΈ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ кСшовС).
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ€Π°Π·Π° Β«::classΒ» Π·Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ (Π°Π½Π°Π»ΠΎΠ³ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° get_class()).
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° опрСдСлСния Π² Π±Π»ΠΎΠΊΠ° catch Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° оставянС Π½Π° запСтая слСд послСдния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π² списъка с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° функция.
  • Нов интСрфСйс Stringable Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° всякакви класовС ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΈ Π² Π½ΠΈΠ· (Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ __toString()).
  • Нова функция str_contains(), опростСн Π°Π½Π°Π»ΠΎΠ³ Π½Π° strpos Π·Π° опрСдСлянС Π½Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π½ΠΈΠ·, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ str_starts_with() ΠΈ str_ends_with() Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° съвпадСния Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈ края Π½Π° Π½ΠΈΠ·Π°.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ функция fdiv(), ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‰Π° опСрация Π½Π° Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π΅Π· изписванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π² случай Π½Π° Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡƒΠ»Π°.
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅. НапримСр, ΠΈΠ·Ρ€Π°Π·ΡŠΡ‚ β€˜echo Β«sum: Β» . $a + $b’ ΠΏΡ€Π΅Π΄ΠΈ сС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°ΡˆΠ΅ ΠΊΠ°Ρ‚ΠΎ β€˜echo (Β«sum: Β» . $a) + $b’, Π° Π² PHP 8 Ρ‰Π΅ бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΊΠ°Ρ‚ΠΎ β€˜echo Β«sum: Β» . ($a + $b)’.
  • УТСсточСна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π°Ρ€ΠΈΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‡Π½ΠΈ ΠΈ Π±ΠΈΡ‚ΠΎΠ²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ Β«[] % [42]Β» ΠΈ Β«$object + 4Β» Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π°Ρ‚ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ°.
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ стабилСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° сортиранС, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ изпълнСния сС Π·Π°ΠΏΠ°Π·Π²Π° Ρ€Π΅Π΄Π° Π½Π° ΠΏΠΎΠ΄Ρ€Π΅Π΄Π±Π° Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ стойности.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster