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

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

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

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

/** @var Π½ΠΈΠ·|null */
$a = foo();

/** @var Π½ΠΈΠ· $a */
echo strpos($a, 'Π·Π΄Ρ€Π°Π²Π΅ΠΉ');

/** @psalm-assert-if-true B $a */
функция isValidB(A $a): bool {
Π²ΡŠΡ€Π½Π΅ $a instanceof B && $a->isValid();
}

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

Π’ новия Π±Ρ€ΠΎΠΉ Π½Π° Псалм изпълнСни опцията "--taint-analysis" Π²ΠΈ позволява Π΄Π° прослСдитС Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ потрСбитСля (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ $_GET['name']) ΠΈ тяхното ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° мСста, ΠΊΠΎΠΈΡ‚ΠΎ изискват Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π½Π°Ρ†ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Ρ…ΠΎ " $ΠΈΠΌΠ΅ β€œ), Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‡Ρ€Π΅Π· Π²Π΅Ρ€ΠΈΠ³ΠΈ Π·Π° прослСдяванС Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ присвоявания ΠΈ извиквания Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° асоциативни масиви $_GET, $_POST ΠΈ $_COOKIE сС счита Π·Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ опасни Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ възмоТно опрСдСлянС Π½Π° собствСни ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ. ДСйствията, ΠΊΠΎΠΈΡ‚ΠΎ изискват избягванС Π½Π° прослСдяванСто, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ HTML ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, добавят HTTP Π·Π°Π³Π»Π°Π²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ SQL заявки.

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

ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ Π½Π°Ρ‡Π°Π»ΠΎ Π°Π»Ρ„Π° тСстванС Π½Π° новия ΠΊΠ»ΠΎΠ½ Π½Π° PHP 8.0. ΠŸΡ€Π΅ΠΌΠΈΠ΅Ρ€Π°Ρ‚Π° Π΅ насрочСна Π·Π° 26 Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ. Π’ новия Ρ„ΠΈΠ»ΠΈΠ°Π» сС ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‚: ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈΠ’:

  • Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Ρ‰Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ производитСлността.
  • ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° Π²ΠΈΠ΄ΠΎΠ²Π΅ съюзи, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‰ΠΈ ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚ΠΈΠΏΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€žΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π° функция foo(Foo|Bar $input): int|float;”).
  • ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ (Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ), ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ позволяват Π΄Π° ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°Ρ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ (ΠΊΠ°Ρ‚ΠΎ информация Π·Π° Ρ‚ΠΈΠΏ) към класовС, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ синтаксиса Π½Π° Docblock.
  • Π‘ΡŠΠΊΡ€Π°Ρ‚Π΅Π½ синтаксис Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π½Π° класовС, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ дСфиницията Π½Π° конструктор ΠΈ свойства.
  • Нов Ρ‚ΠΈΠΏ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ - статичСн.
  • Нов Ρ‚ΠΈΠΏ - смСсСн, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° опрСдСлянС Π΄Π°Π»ΠΈ Π΄Π°Π΄Π΅Π½Π° функция ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅.
  • изразяванС Ρ…Π²ΡŠΡ€Π»ΡΠΌ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
  • 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

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