ИзданиС Π½Π° Псалм 3.12, статичСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π·Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ PHP. Алфа ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° PHP 8.0

ΠšΠΎΠΌΠΏΠ°Π½ΠΈΡ˜Π°Ρ‚Π° Π’ΠΈΠΌΠ΅ΠΎ објавСно Π½ΠΎΠ²ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° статички Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Псалм 3.12, кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ ΠΎΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΈ ΠΈ суптилни Π³Ρ€Π΅ΡˆΠΊΠΈ Π²ΠΎ PHP ΠΊΠΎΠ΄ΠΎΡ‚, ΠΊΠ°ΠΊΠΎ ΠΈ автоматски Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ Π½Π΅ΠΊΠΎΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ. БистСмот Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π΅Π½ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ Π²ΠΎ наслСдниот ΠΊΠΎΠ΄ ΠΈ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ ΡˆΡ‚ΠΎ користи ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ²Π΅Π΄Π΅Π½ΠΈ Π²ΠΎ Π½ΠΎΠ²ΠΈΡ‚Π΅ Π³Ρ€Π°Π½ΠΊΠΈ Π½Π° PHP. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ Π΅ напишан Π²ΠΎ PHP ΠΈ дистрибуирани ΠΎΠ΄ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Ρ†Π°Ρ‚Π° MIT.

Псалм Π³ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π° ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ Ρ€Π°Π·Π½ΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ° Π·Π° мСшањС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π²ΠΎ ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚, Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΈ Π»ΠΎΠ³ΠΈΡ‡ΠΊΠΈ тСстови (ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС β€žif ($a && $a) {}β€œ, β€žif ($a && !$a) {}β€œ ΠΈ β€ž if ( $a) {} elseif ($a) {}"), нСцСлосна ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π°Ρ‚Π° Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚. Анализаторот Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ Ρ€Π΅ΠΆΠΈΠΌ со повСќС нишки. МоТно Π΅ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠ°Ρ‚ постСпСно ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅, ΠΊΠΎΠΈ Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ само Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ сС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚ΠΈ ΠΎΠ΄ послСдното ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ сС Π±Π΅Π·Π±Π΅Π΄Π½ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°ΡšΠ΅ Π·Π° Π΄Π° сС ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΏΡ€ΠΈΠ±Π΅Π»Π΅ΡˆΠΊΠΈ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Docblock (β€ž/** @var Π’ΠΈΠΏ */β€œ) Π·Π° Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΈ врСдности, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π° Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚. ΠŸΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΎ Π΅ ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° шСми Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ‚Π²Ρ€Π΄Π΅ΡšΠ°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

/** @var стринг|null */
$a = foo();

/** @var стринг $a */
echo strpos($a, 'Π·Π΄Ρ€Π°Π²ΠΎ');

/** @psalm-assert-if-true B $a */
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° isValidB(A $a) : bool {
Π²Ρ€Π°Ρ‚ΠΈ $a ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄ B && $a->isValid();
}

Π—Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π΅Π»ΠΈΠΌΠΈΠ½Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½Π° Π΅ Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° Psalter, која ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ ΠΈ Ρ‚Π°Π° ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° Ρ€Π΅ΡˆΠ°Π²Π°Ρ˜Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΊΠΎΠ΄ΠΎΡ‚, Π΄ΠΎΠ΄Π°Π²Π°Ρ˜Ρ‚Π΅ ΠΏΡ€ΠΈΠ±Π΅Π»Π΅ΡˆΠΊΠΈ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΈ ΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π°Ρ˜Ρ‚Π΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΏΡ€Π΅ΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅ класи ΠΎΠ΄ Π΅Π΄Π΅Π½ имСнски простор Π²ΠΎ Π΄Ρ€ΡƒΠ³, ΠΏΡ€Π΅ΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ класи ΠΈ ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ класи ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ.

Π’ΠΎ Π½ΠΎΠ²ΠΈΠΎΡ‚ Π±Ρ€ΠΎΡ˜ Π½Π° Псалм ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ ΠΎΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° β€ž--taint-analysisβ€œ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ја слСдитС врската ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π²Π»Π΅Π·Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ ΠΎΠ΄ корисникот (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, $_GET['name']) ΠΈ Π½ΠΈΠ²Π½Π°Ρ‚Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° мСста ΠΊΠΎΠΈ Π±Π°Ρ€Π°Π°Ρ‚ бСгство Π½Π° Π·Π½Π°Ρ†ΠΈ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅Ρ…ΠΎ β€ž$name"), Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ ΠΏΡ€Π΅ΠΊΡƒ ΡΠΈΠ½ΡŸΠΈΡ€ΠΈ Π·Π° слСдСњС Π½Π° срСдни Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΠΎΠ²ΠΈΡ†ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π£ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° Π°ΡΠΎΡ†ΠΈΡ˜Π°Ρ‚ΠΈΠ²Π½ΠΈ Π½ΠΈΠ·ΠΈ $_GET, $_POST ΠΈ $_COOKIE сС смСта Π·Π° ΠΈΠ·Π²ΠΎΡ€ΠΈ Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΎ опасни ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π½ΠΎ исто Ρ‚Π°ΠΊΠ° Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡƒΠ²Π°ΡšΠ΅ Π½Π° сопствСни ΠΈΠ·Π²ΠΎΡ€ΠΈ. Π”Π΅Ρ˜ΡΡ‚Π²Π°Ρ‚Π° ΡˆΡ‚ΠΎ Π±Π°Ρ€Π°Π°Ρ‚ бСгство ΠΎΠ΄ слСдСњС Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ ΠΈΠ·Π»Π΅Π·Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π°Ρ‚ HTML содрТина, Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ‚ HTTP заглавија ΠΈΠ»ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ SQL Π±Π°Ρ€Π°ΡšΠ°.

Π’Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° сС користи ΠΊΠΎΠ³Π° сС користат Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Π΅Ρ…ΠΎ, exec, Π²ΠΊΠ»ΡƒΡ‡ΠΈ ΠΈ Π·Π°Π³Π»Π°Π²ΠΈΠ΅. Кога сС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π·Π° бСгство, сС Π·Π΅ΠΌΠ°Π°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΎΠ²ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠ°ΠΊΠΎ тСкст, Π½ΠΈΠ·ΠΈ со SQL, HTML ΠΈ Shell ΠΊΠΎΠ΄, Π½ΠΈΠ·ΠΈ со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ пропуститС Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ ΡˆΡ‚ΠΎ Π²ΠΎΠ΄Π°Ρ‚ Π΄ΠΎ ΡΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΌΠ΅Ρ“Ρƒ страници (XSS) ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Π° Π½Π° SQL.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ Π°Π»Ρ„Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° Π³Ρ€Π°Π½ΠΊΠ° PHP 8.0. Π˜Π·Π΄Π°Π²Π°ΡšΠ΅Ρ‚ΠΎ Π΅ Π·Π°ΠΊΠ°ΠΆΠ°Π½ΠΎ Π·Π° 26 Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ. Π’ΠΎ Π½ΠΎΠ²Π°Ρ‚Π° Ρ„ΠΈΠ»ΠΈΡ˜Π°Π»Π° сС ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°Π°Ρ‚: ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈΠšΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС:

  • Π’ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ JIT ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€, Ρ‡ΠΈΡ˜Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° ќС ја ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ продуктивноста.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° синдикални Ρ‚ΠΈΠΏΠΎΠ²ΠΈ, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ˜ΡœΠΈ ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ΄ Π΄Π²Π° ΠΈΠ»ΠΈ повСќС Ρ‚ΠΈΠΏΠ° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, β€žΡ˜Π°Π²Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° foo(Foo|Bar $input): int|float;β€œ).
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ (забСлСшки) ΠΊΠΎΠΈ Π²ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π°Π°Ρ‚ Π΄Π° Π³ΠΈ Π²Ρ€Π·ΡƒΠ²Π°Ρ‚Π΅ ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ (ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΈ) Π·Π° класи Π±Π΅Π· Π΄Π° користитС синтакса Π½Π° Docblock.
  • Π‘ΠΊΡ€Π°Ρ‚Π΅Π½Π° синтакса Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π·Π° класи, ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ја ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° конструктор ΠΈ ΡΠ²ΠΎΡ˜ΡΡ‚Π²Π°Ρ‚Π°.
  • Нов Ρ‚ΠΈΠΏ Π½Π° Π²Ρ€Π°ΡœΠ°ΡšΠ΅ - статички.
  • Нов Ρ‚ΠΈΠΏ - мСшани, ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π° Π΄Π° сС ΡƒΡ‚Π²Ρ€Π΄ΠΈ Π΄Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΡ€ΠΈΡ„Π°ΡœΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ.
  • Π˜Π·Ρ€Π°Π·ΡƒΠ²Π°ΡšΠ΅ Ρ„Ρ€Π»ΠΈ Π΄Π° сС справи со исклучоцитС.
  • Π‘Π»Π°Π±Π° ΠΊΠ°Ρ€Ρ‚Π° Π΄Π° сС создадат ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС ΠΆΡ€Ρ‚Π²ΡƒΠ²Π°Π°Ρ‚ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Ρ“ΡƒΠ±Ρ€Π΅ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π½Π΅ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ кСшови).
  • ΠœΠΎΠΆΠ½ΠΎΡΡ‚ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚ β€ž::classβ€œ Π·Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ (Π°Π½Π°Π»ΠΎΠ³Π½ΠΎ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ get_class()).
  • ΠœΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π²ΠΎ Π±Π»ΠΎΠΊΠΎΡ‚ Π·Π° Ρ„Π°ΡœΠ°ΡšΠ΅ исклучоци ΠΊΠΎΠΈ Π½Π΅ сС Π²Ρ€Π·Π°Π½ΠΈ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
  • ΠœΠΎΠΆΠ½ΠΎΡΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ˜ΡœΠΈ Π·Π°ΠΏΠΈΡ€ΠΊΠ° ΠΏΠΎ послСдниот Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π²ΠΎ листата Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°.
  • Нов ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π‘Ρ‚Ρ€ΠΈΠ½Π³Π»ΠΈΠ² Π·Π° Π΄Π° сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Π°Ρ‚ ситС Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π½Π° стрингови ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€Π°Ρ‚ Π²ΠΎ стринг (Π·Π° кој Π΅ достапСн ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ __toString().
  • Нова Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° str_contains(), поСдноставСн Π°Π½Π°Π»ΠΎΠ³ Π½Π° strpos Π·Π° ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° појава Π½Π° ΠΏΠΎΠ΄Π½ΠΈΠ·Π°, ΠΊΠ°ΠΊΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ str_starts_with() ΠΈ str_ends_with() Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΠΎΠ²ΠΏΠ°Ρ“Π°ΡšΠ°Ρ‚Π° Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ ΠΈ ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° Π½ΠΈΠ·Π°Ρ‚Π°.
  • Π”ΠΎΠ΄Π°Π΄Π΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° fdiv (), кој Π²Ρ€ΡˆΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° дСлСњС Π±Π΅Π· Π΄Π° Ρ„Ρ€Π»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ дСлСњС со Π½ΡƒΠ»Π°.
  • Π‘ΠΌΠ΅Π½Π΅Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅ Π½ΠΈΠ·Π°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚ β€žΠ΅Ρ…ΠΎ β€žΠ·Π±ΠΈΡ€:β€œ . $a + $b' ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ бСшС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°Π½ΠΎ ΠΊΠ°ΠΊΠΎ 'echo ("sum: " . $a) + $b', Π° Π²ΠΎ PHP 8 ќС сС Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π° ΠΊΠ°ΠΊΠΎ 'echo "sum: " . ($a + $b)'.
  • Π—Π°Ρ‚Π΅Π³Π½Π°Ρ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π°Ρ€ΠΈΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‡ΠΊΠΈΡ‚Π΅ ΠΈ битскитС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ β€ž[] % [42]β€œ ΠΈ β€ž$object + 4β€œ ќС Ρ€Π΅Π·ΡƒΠ»Ρ‚ΠΈΡ€Π°Π°Ρ‚ со Π³Ρ€Π΅ΡˆΠΊΠ°.
  • Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ стабилСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚Π°ΠΌ Π·Π° ΡΠΎΡ€Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π²ΠΎ кој сС Π·Π°Ρ‡ΡƒΠ²ΡƒΠ²Π° рСдослСдот Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ врСдности Π½ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ‚Π΅ΠΊΠΈ.

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€