ИзданиС 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