Psalm 3.12 рдЪреЗ рдкреНрд░рдХрд╛рд╢рди, PHP рднрд╛рд╖реЗрд╕рд╛рдареА рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ. PHP 8.0 рдЪреЗ рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬ

Vimeo рдХрдВрдкрдиреА рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдирд╡реАрди рдкреНрд░рдХрд╛рд╢рди рд╕реНрддреЛрддреНрд░ 3.12, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ PHP рдХреЛрдбрдордзреАрд▓ рд╕реНрдкрд╖реНрдЯ рдЖрдгрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрд╢рд╛ рджреЛрдиреНрд╣реА рддреНрд░реБрдЯреА рдУрд│рдЦрдгреНрдпрд╛рд╕ рддрд╕реЗрдЪ рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рддреНрд░реБрдЯреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рджреБрд░реБрд╕реНрдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рд▓реЗрдЧрд╕реА рдХреЛрдб рдЖрдгрд┐ PHP рдЪреНрдпрд╛ рдирд╡реАрди рд╢рд╛рдЦрд╛рдВрдордзреНрдпреЗ рд╕рд╛рджрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрдзреБрдирд┐рдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгрд╛рд▒реНрдпрд╛ рдХреЛрдбрдордзреАрд▓ рд╕рдорд╕реНрдпрд╛ рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рдкреНрд░рдгрд╛рд▓реА рдпреЛрдЧреНрдп рдЖрд╣реЗ. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб PHP рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд MIT рдкрд░рд╡рд╛рдиреНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд.

рд╕реНрддреЛрддреНрд░ рдЪреБрдХреАрдЪреНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдмрд╣реБрддреЗрдХ рд╕рдорд╕реНрдпрд╛ рддрд╕реЗрдЪ рд╡рд┐рд╡рд┐рдз рдУрд│рдЦрддреЗ рдард░рд╛рд╡рд┐рдХ рдЪреБрдХрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдордзреНрдпреЗ рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдЪреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдорд┐рд╕рд│рдгреНрдпрд╛рдмрджреНрджрд▓ рдЪреЗрддрд╛рд╡рдгреАрдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ, рдЪреБрдХреАрдЪреНрдпрд╛ рддрд╛рд░реНрдХрд┐рдХ рдЪрд╛рдЪрдгреНрдпрд╛ (рдЬрд╕реЗ рдХреА тАЬif ($a && $a) {}тАЭ, тАЬif ($a && !$a) {}тАЭ рдЖрдгрд┐ тАЬ if ( $a) {} elseif ($a) {}"), рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгрдзрд░реНрдорд╛рдВрдЪреЗ рдЕрдкреВрд░реНрдг рдЖрд░рдВрднреАрдХрд░рдг. рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдореЛрдбрдордзреНрдпреЗ рдЪрд╛рд▓рддреЗ. рд╡рд╛рдвреАрд╡ рд╕реНрдХреЕрди рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ, рдЬреЗ рдлрдХреНрдд рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд╕реНрдХреЕрдирдкрд╛рд╕реВрди рдмрджрд▓рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкрд░рд╡рд╛рдирдЧреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рд╛рдзрдиреЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реА рдЬрд╛рддрд╛рдд рд╡рд╛рдкрд░рд╛ рд╕реНрд╡рд░реВрдкрд╛рддреАрд▓ рднрд╛рд╖реНрдпреЗ рдбреЙрдХрдмреНрд▓реЙрдХ (тАЬ/** @var рдкреНрд░рдХрд╛рд░ */тАЭ) рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдкреНрд░рдХрд╛рд░, рд░рд┐рдЯрд░реНрди рд╡реНрд╣реЕрд▓реНрдпреВ, рдлрдВрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕, рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгрдзрд░реНрдорд╛рдВрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА. рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд░ рдирдореБрдиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдЖрдЧреНрд░рд╣ рд╡рд┐рдзрд╛рдиреЗ рд╡рд╛рдкрд░рдгреЗ рджреЗрдЦреАрд▓ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

/** @var рд╕реНрдЯреНрд░рд┐рдВрдЧ|рдирд▓ */
$a = foo();

/** @var рд╕реНрдЯреНрд░рд┐рдВрдЧ $a */
echo strpos($a, 'hello');

/** @psalm-asssert-if-true B$a */
рдХрд╛рд░реНрдп isValidB(A $a): bool {
B && $a->isValid();
}

рд╕рд╛рдкрдбрд▓реЗрд▓реНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдЙрдиреНрдореВрд▓рди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, Psalter рдЙрдкрдпреБрдХреНрддрддрд╛ рдкреНрд░рджрд╛рди рдХреЗрд▓реА рдЖрд╣реЗ, рдЬреА рдкреНрд▓рдЧрдЗрдирдирд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ рдЖрдгрд┐ рддреЛ рд╕рдВрдордд рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд╡рд╛рд░рдг рдХрд░рд╛, рдЯрд╛рдИрдк рдПрдиреЛрдЯреЗрд╢рдиреНрд╕ рдЬреЛрдбрд╛ рдЖрдгрд┐ рдХреНрд▓рд╛рд╕реЗрд╕ рдПрдХрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреВрди рджреБрд╕рд▒реНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рд╣рд▓рд╡рд╛, рдХреНрд▓рд╛рд╕реЗрд╕рдордзреНрдпреЗ рдкрджреНрдзрддреА рд╣рд▓рд╡рд╛ рдЖрдгрд┐ рдХреНрд▓рд╛рд╕реЗрд╕ рдЖрдгрд┐ рдкрджреНрдзрддреАрдВрдЪреЗ рдирд╛рд╡ рдмрджрд▓рд╛.

рд╕реНрддреЛрддреНрд░рд╛рдЪреНрдпрд╛ рдирд╡реАрди рдЕрдВрдХрд╛рдд рд▓рд╛рдЧреВ рдХреЗрд▓реЗ "--taint-analysis" рдкрд░реНрдпрд╛рдп рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдХрдбреВрди рдорд┐рд│рд╛рд▓реЗрд▓реЗ рдЗрдирдкреБрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, $_GET['name']) рдЖрдгрд┐ рдХреЕрд░реЗрдХреНрдЯрд░ рдПрд╕реНрдХреЗрдкрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдард┐рдХрд╛рдгреА рддреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, echo" рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рд╕рдВрдмрдВрдз рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ. $рдирд╛рд╡ "), рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯреНрд╕ рдЖрдгрд┐ рдлрдВрдХреНрд╢рди рдХреЙрд▓реНрд╕рдЪреНрдпрд╛ рдЯреНрд░реЕрдХрд┐рдВрдЧ рд╕рд╛рдЦрд│реАрд╕рд╣. рдЕрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡реНрд╣ рдЕреЕрд░реЗ $_GET, $_POST рдЖрдгрд┐ $_COOKIE рдЪрд╛ рд╡рд╛рдкрд░ рд╕рдВрднрд╛рд╡реНрдп рдзреЛрдХрд╛рджрд╛рдпрдХ рдбреЗрдЯрд╛рдЪрд╛ рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рддреЛ, рдкрд░рдВрддреБ рд╣реЗ рджреЗрдЦреАрд▓ рд╢рдХреНрдп рдЖрд╣реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреЗ рд╕реНрд░реЛрдд. рдПрд╕реНрдХреЗрдкрд┐рдВрдЧ рдЯреНрд░реЕрдХрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХреНрд░рд┐рдпрд╛рдВрдордзреНрдпреЗ рдЖрдЙрдЯрдкреБрдЯ рдСрдкрд░реЗрд╢рдиреНрд╕ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд рдЬреЗ HTML рд╕рд╛рдордЧреНрд░реА рддрдпрд╛рд░ рдХрд░рддрд╛рдд, HTTP рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЬреЛрдбрддрд╛рдд рдХрд┐рдВрд╡рд╛ SQL рдХреНрд╡реЗрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛рдд.

echo, exec, include рдЖрдгрд┐ header рд╕рд╛рд░рдЦреА рдлрдВрдХреНрд╢рдиреНрд╕ рд╡рд╛рдкрд░рддрд╛рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдПрд╕реНрдХреЗрдкрд┐рдВрдЧрдЪреНрдпрд╛ рдЧрд░рдЬреЗрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛рдирд╛, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд╕реЗ рдХреА рдордЬрдХреВрд░, рдПрд╕рдХреНрдпреВрдПрд▓рд╕рд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдПрдЪрдЯреАрдПрдордПрд▓ рдЖрдгрд┐ рд╢реЗрд▓ рдХреЛрдб, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рдЬрд╛рддрд╛рдд. рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдореЛрдб рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдбрдордзреАрд▓ рднреЗрджреНрдпрддрд╛ рдУрд│рдЦрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ рдЬреНрдпрд╛рдореБрд│реЗ рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ (XSS) рдХрд┐рдВрд╡рд╛ SQL рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реЛрддреЗ.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рд╕реБрд░реБрд╡рд╛рдд рдирд╡реАрди PHP 8.0 рд╢рд╛рдЦреЗрдЪреА рдЕрд▓реНрдлрд╛ рдЪрд╛рдЪрдгреА. 26 рдиреЛрд╡реНрд╣реЗрдВрдмрд░рд▓рд╛ рд░рд┐рд▓реАрдЬ рд╣реЛрдгрд╛рд░ рдЖрд╣реЗ. рдирд╡реАрди рд╢рд╛рдЦреЗрдд рдкреБрдвреАрд▓ рдЧреЛрд╖реНрдЯреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрд╣реЗрдд. рдирд╡рдХрд▓реНрдкрдирд╛рдЬрд╕реЗ:

  • рдЪрд╛рд▓реВ рдЖрд╣реЗ рдЬреЗрдЖрдпрдЯреА рдХрдВрдкрд╛рдЗрд▓рд░, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЙрддреНрдкрд╛рджрдХрддрд╛ рд╕реБрдзрд╛рд░реЗрд▓.
  • рдЖрдзрд╛рд░ рдпреБрдирд┐рдпрди рдкреНрд░рдХрд╛рд░, рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреЗ рд╕рдВрдЧреНрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, тАЬрдкрдмреНрд▓рд┐рдХ рдлрдВрдХреНрд╢рди foo(Foo|Bar $input): int|float;тАЭ).
  • рдЖрдзрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ (рднрд╛рд╖реНрдп) рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЙрдХрдмреНрд▓реЙрдХ рд╕рд┐рдВрдЯреЕрдХреНрд╕ рди рд╡рд╛рдкрд░рддрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рдЬрд╕реЗ рдХреА рдЯрд╛рдИрдк рдорд╛рд╣рд┐рддреА) рд╡рд░реНрдЧрд╛рдВрдордзреНрдпреЗ рдмрд╛рдВрдзрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд.
  • рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рд╡рд░реНрдЧ рд╡реНрдпрд╛рдЦреНрдпрд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЖрдгрд┐ рдЧреБрдгрдзрд░реНрдорд╛рдВрдЪреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдПрдХрддреНрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.
  • рдирд╡реАрди рдкрд░рддрд╛рд╡рд╛ рдкреНрд░рдХрд╛рд░ - рд╕реНрдерд┐рд░.
  • рдирд╡реАрди рдкреНрд░рдХрд╛рд░ - рдорд┐рд╢реНрд░рд┐рдд, рдЬреНрдпрд╛рдЪрд╛ рдЙрдкрдпреЛрдЧ рдлрдВрдХреНрд╢рди рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реНрд╡реАрдХрд╛рд░рддреЛ рдХреА рдирд╛рд╣реА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.
  • рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдлреЗрдХрдгреЗ рдЕрдкрд╡рд╛рдж рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА.
  • WeakMap рдХрдЪрд░рд╛ рдЧреЛрд│рд╛ рдХрд░рддрд╛рдирд╛ рддреНрдпрд╛рдЧ рдХрд░рддрд╛ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд╕реНрддреВ рддрдпрд╛рд░ рдХрд░рдгреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЕрд╢реЗ рд╕рд╛рдард╡рдгреЗ).
  • рд╕рдВрдзреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╛рдареА "::рдХреНрд▓рд╛рд╕" рдЕрднрд┐рд╡реНрдпрдХреНрддреА рд╡рд╛рдкрд░рдгреЗ (рдЧреЗрдЯ_рдХреНрд▓рд╛рд╕() рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ).
  • рд╕рдВрдзреА рдЕрдкрд╡рд╛рджрд╛рдВрдЪреНрдпрд╛ рдХреЕрдЪ рдмреНрд▓реЙрдХрдордзреАрд▓ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЬреНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдирд╛ рдмрд╛рдВрдзреАрд▓ рдирд╛рд╣реАрдд.
  • рд╕рдВрдзреА рдлрдВрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрддреАрд▓ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдШрдЯрдХрд╛рдирдВрддрд░ рд╕реНрд╡рд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЛрдбрдгреЗ.
  • рдирд╡реАрди рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХрд┐рдВрд╡рд╛ рдбреЗрдЯрд╛ рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ (рдЬреНрдпрд╛рд╕рд╛рдареА __toString() рдкрджреНрдзрдд рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ).
  • рдирд╡реАрди рдЧреБрдгрд╡рд┐рд╢реЗрд╖ str_contains(), рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧрдЪреА рдШрдЯрдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдЯреНрд░рдкреЛрд╕рдЪрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдЕреЕрдирд╛рд▓реЙрдЧ, рддрд╕реЗрдЪ рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪреНрдпрд╛ рд╕реБрд░реВрд╡рд╛рддреАрд╕ рдЖрдгрд┐ рд╢реЗрд╡рдЯреА рдЬреБрд│рдгреНрдпрд╛ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛