āĻāĻŋāĻŽāĻŋāĻ āĻā§āĻŽā§āĻĒāĻžāĻ¨āĻŋ
āĻā§āĻ¤āĻ¸āĻāĻšāĻŋāĻ¤āĻž āĻā§āĻ˛ āĻāĻžāĻāĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¤ āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻāĻ°ā§, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻā§āĻ˛ āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ
/** @var āĻ¸ā§āĻā§āĻ°āĻŋāĻ|āĻ¨āĻžāĻ˛ */
$a = foo();
/** @var āĻ¸ā§āĻā§āĻ°āĻŋāĻ $a */
echo strpos($a, 'hello');
/** @psalm-assert-if-true B$a */
āĻĢāĻžāĻāĻļāĻ¨ isValidB(A $a): bool {
B && $a->isValid();
}
āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¨āĻŋāĻ°ā§āĻŽā§āĻ˛ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, Psalter āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻ¯āĻž āĻĒā§āĻ˛āĻžāĻāĻāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ āĻāĻŦāĻ
āĻā§āĻ¤āĻ¸āĻāĻšāĻŋāĻ¤āĻž āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻā§āĻ¯āĻžāĻ¯āĻŧ
āĻāĻā§, āĻāĻā§āĻ¸ā§āĻ, āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻŦāĻ āĻšā§āĻĄāĻžāĻ°ā§āĻ° āĻŽāĻ¤ā§ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦā§āĻ§āĻ¤āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻĒāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻĄā§āĻāĻžāĻ° āĻ§āĻ°āĻ¨ āĻ¯ā§āĻŽāĻ¨ āĻĒāĻžāĻ ā§āĻ¯, āĻāĻ¸āĻāĻŋāĻāĻāĻ˛ āĻ¸āĻš āĻ¸ā§āĻā§āĻ°āĻŋāĻ, āĻāĻāĻāĻāĻŋāĻāĻŽāĻāĻ˛ āĻāĻŦāĻ āĻļā§āĻ˛ āĻā§āĻĄ, āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¸āĻš āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻā§āĻ˛āĻŋāĻā§ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻžāĻ¯āĻŧ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻŋāĻ¤ āĻŽā§āĻĄ āĻāĻĒāĻ¨āĻžāĻā§ āĻā§āĻĄā§āĻ° āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ āĻ¯āĻž āĻā§āĻ°āĻ¸-āĻ¸āĻžāĻāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻŋāĻ (XSS) āĻŦāĻž SQL āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§āĻ° āĻĻāĻŋāĻā§ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻŋāĻ¤ āĻāĻ°ā§āĨ¤
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻāĻāĻž āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
-
āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤āĻŋ JIT āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° , āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ¤ā§āĻĒāĻžāĻĻāĻ¨āĻļā§āĻ˛āĻ¤āĻž āĻāĻ¨ā§āĻ¨āĻ¤ āĻšāĻŦā§. - āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨
āĻāĻāĻ¨āĻŋāĻ¯āĻŧāĻ¨ āĻĒā§āĻ°āĻāĻžāĻ° , āĻĻā§āĻ āĻŦāĻž āĻ¤āĻ¤ā§āĻ§āĻŋāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻāĻā§āĻ°āĻš āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, "āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻĢāĻžāĻāĻļāĻ¨ foo(Foo|Bar $input): int|float;")āĨ¤ - āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨
āĻā§āĻŖāĻžāĻŦāĻ˛ā§ (āĻā§āĻāĻž) āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ Docblock āĻ¸āĻŋāĻ¨āĻā§āĻ¯āĻžāĻā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻāĻ°ā§āĻ āĻā§āĻ˛āĻžāĻ¸ā§ āĻŽā§āĻāĻžāĻĄā§āĻāĻž (āĻ¯ā§āĻŽāĻ¨ āĻ¤āĻĨā§āĻ¯ āĻāĻžāĻāĻĒ) āĻāĻŦāĻĻā§āĻ§ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ -
āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻžāĻā§āĻ¯ āĻāĻ āĻ¨ āĻā§āĻ˛āĻžāĻ¸ āĻ¸āĻāĻā§āĻāĻž, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻāĻ¨āĻ¸ā§āĻā§āĻ°āĻžāĻā§āĻāĻ° āĻāĻŦāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ā§āĻ° āĻ¸āĻāĻā§āĻāĻž āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ - āĻ¨āĻ¤ā§āĻ¨ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻĒā§āĻ°āĻāĻžāĻ° -
āĻ¸ā§āĻĨāĻŋāĻ° . - āĻ¨āĻ¤ā§āĻ¨ āĻ§āĻ°āĻ¨ā§āĻ° -
āĻŽāĻŋāĻļā§āĻ° , āĻ¯āĻž āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ§āĻ°āĻ¨ā§āĻ° āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°ā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ - āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ
āĻ¨āĻŋāĻā§āĻˇā§āĻĒ āĻŦā§āĻ¯āĻ¤āĻŋāĻā§āĻ°āĻŽāĻā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§āĨ¤ -
āĻĻā§āĻ°ā§āĻŦāĻ˛āĻŽā§āĻ¯āĻžāĻĒ āĻāĻŦāĻ°ā§āĻāĻ¨āĻž āĻ¸āĻāĻā§āĻ°āĻšā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻā§āĻ¸āĻ°ā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŽāĻ¨ āĻŦāĻ¸ā§āĻ¤ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻā§āĻ¯āĻžāĻļā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž)āĨ¤ -
āĻ¸ā§āĻ¯ā§āĻ āĻ āĻŦāĻā§āĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ "::class" āĻāĻā§āĻ¸āĻĒā§āĻ°ā§āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ (get_class() āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻ°ā§āĻĒ)āĨ¤ -
āĻ¸ā§āĻ¯ā§āĻ āĻŦā§āĻ¯āĻ¤āĻŋāĻā§āĻ°āĻŽā§āĻ° āĻā§āĻ¯āĻžāĻ āĻŦā§āĻ˛āĻā§āĻ° āĻ¸āĻāĻā§āĻāĻž āĻ¯āĻž āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŦāĻĻā§āĻ§ āĻ¨āĻ¯āĻŧāĨ¤ -
āĻ¸ā§āĻ¯ā§āĻ āĻĢāĻžāĻāĻļāĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°ā§āĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ° āĻļā§āĻˇ āĻāĻĒāĻžāĻĻāĻžāĻ¨ā§āĻ° āĻĒāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻŽāĻž āĻ°ā§āĻā§āĨ¤ - āĻ¨āĻ¤ā§āĻ¨ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸
āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻ¯ā§āĻā§āĻ¯ āĻā§āĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻĒā§āĻ°āĻāĻžāĻ° āĻŦāĻž āĻĄā§āĻāĻž āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻ¯āĻž āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ (āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¯ __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