NoVerify static рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдПрдХ рдХрд┐рд▓рд░ рд╕реБрд╡рд┐рдзрд╛ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ: рдирд┐рд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрд░реАрдХрд╛ рдЬрд┐рд╕рдореЗрдВ рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдХреЛрдб рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЖрдкрдХреЛ рд╕рд╛рдЬрд╝рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА рдирд┐рд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛:
$x && $x;
рдпрд╣ рдирд┐рд░реАрдХреНрд╖рдг рдЙрди рд╕рднреА рддрд╛рд░реНрдХрд┐рдХ &&
рднрд╛рд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рд╕рдорд╛рди рд╣реИрдВред
NoVerify Go рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП PHP рдХреЗ рд▓рд┐рдП рдПрдХ static рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ " NoVerify: Linter for PHP рд╕реЗ VKontakte Team " рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рдФрд░ рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдореИрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╣рдо рдЗрд╕рдореЗрдВ рдХреИрд╕реЗ рдЖрдПред

рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ
рдЬрдм рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдирдИ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рднреА рдЖрдкрдХреЛ рдЧреЛ рдкрд░ рдХреЛрдб рдХреА рдХреБрдЫ рджрд░реНрдЬрди рд▓рд╛рдЗрдиреЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЖрд╢реНрдЪрд░реНрдп рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреЗ рд╣реИрдВ: рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?
рдЧреЛ рдкрд░, рд╣рдордиреЗ рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реИрдХреНрд╢рди, рд▓рд┐рдВрдЯрд░ рдХреА рдкреВрд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреИрд╢, рдФрд░ рдХрдИ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рд▓рд┐рдЦреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд┐рдирд╛ NoVerify рдЕрд╕рдВрднрд╡ рд╣реИред рдпреЗ рдШрдЯрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди "рдПрдХ рдлрд╝рдВрдХреНрд╢рди X рдХреЛ рддрд░реНрдХ рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рдиреЗ" рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдмрд╕ рдРрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдирд┐рдпрдореЛрдВ рдХрд╛ рддрдВрддреНрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдбрд╛рдпрдиреЗрдорд┐рдХ рдирд┐рдпрдо рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рдЗрдВрдЯрд░реНрдирд▓ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рд╕рдВрд╕реНрдХрд░рдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрд╡рдпрдВ NoVerify рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдПрдХ рдХреЛрдб рдирд┐рд░реАрдХреНрд╖рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рд╣рдо рдХрднреА-рдХрднреА рд╕рддреНрдпрд╛рдкрди рдХрд╣реЗрдВрдЧреЗ)ред
рд╣рд╛рдВ, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрди рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд╖рд╛ рд╣реИ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рд╢рдмреНрдж рдЧрд▓рдд рдЦрд╛рдХрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдпрд╣ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдирд┐рдпрдореЛрдВ рдХреА рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ nil
рд╕реВрдЪрдХ рдХреА рдбреЗрдЯрд╛ рджреМрдбрд╝ рдпрд╛ nil
рджрд░реНрдЬ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рд╕рд╛рдБрдЪрд╛ рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛
рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛ PHP рдХреЗ рд╕рд╛рде рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдВрдЧрдд рд╣реИред рдпрд╣ рдЗрд╕рдХреЗ рдЕрдзреНрдпрдпрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдорд╛рди PhpStorm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рдирд┐рдпрдо рдлрд╝рд╛рдЗрд▓ рдХреА рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЖрдИрдбреАрдИ рдХреЛ рдПрдХ рд╕реБрдЦрджрд╛рдпрдХ рдирд┐рд░реНрджреЗрд╢ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ:
<?php
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпреЛрдЧ phpgrep рдерд╛ред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди NoVerify рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЗрд╕рдореЗрдВ рдЯрд╛рдЗрдк рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред
рдореЗрд░реЗ рдХреБрдЫ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ phpgrep рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдФрд░ рддрд░реНрдХ рдерд╛ред
Phpgrep рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ PHP рдХреЗ рд▓рд┐рдП рдПрдХ gogrep рдЕрдиреБрдХреВрд▓рди рд╣реИ (рдЖрдк cgrep рдореЗрдВ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ )ред рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЛрдб рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╡рд┐рдХрд▓реНрдк PhpStorm рд╕реЗ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЦреЛрдЬ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд (SSR) рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдЧрд╛ред рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ - рдпрд╣ рдПрдХ рдореМрдЬреВрджрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ phpgrep рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рддрдХрдиреАрдХреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: PHP рдХреЗ рд╕рд╛рде рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрд╕рдВрдЧрдд рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд░реНрд╕рд░ рдЗрд╕реЗ рдорд╛рд╕реНрдЯрд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмрд╛рдЗрдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдХрд╛рд░рдг рдХреА рдЦреЛрдЬ рдХреА рдЧрдИ рдереАред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдерд╛
рдкреАрдПрдЪрдкреА-рдХреЛрдб рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓рдЧрднрдЧ рдПрдХ-рд╕реЗ-рдПрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрд╕-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╡рд╛рдХреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рдеред
PHP-like Lisp-like ----------------------------- $x = $y | (expr = $x $y) fn($x, 1) | (expr call fn $x 1) : (or (expr == (type string (expr)) (expr)) (expr == (expr) (type string (expr))))
рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреА рдкрдардиреАрдпрддрд╛ рдЕрднреА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╣рдо phpdoc рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНрд▓реИрдВрдЧ-рдХреНрд╡реЗрд░реА рдПрдХ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ!
рдЖрдЗрдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдирдП рдирд┐рджрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдерд╛рдкрд┐рдд NoVerify рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╛рдЗрдирд░реА рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рд▓реЗрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЧреЛ-рдЯреВрд▓рдЪреИрди рдирд╣реАрдВ рд╣реИ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реИ, рддреЛ рдЖрдк рд╕реНрд░реЛрдд рд╕реЗ рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
PHP рдХреЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдп рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ parse_str ред рдЙрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:
рдпрджрд┐ рдЖрдк рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ рддреЛ рдЖрдк рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ:
$str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str); echo $first;
рдорд┐рдореА, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдореЗрдВ рдереЗред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░, $result
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирдП рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рд╕рд░рдгреА рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПред
рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдмрдирд╛рдПрдВ
myrules.php
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
<?php parse_str($_);
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд┐рдпрдо рдлрд╝рд╛рдЗрд▓ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ phpgrep рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ phpdoc рдЯрд┐рдкреНрдкрдгреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рд╢реНрд░реЗрдгреАред
рдЕрдм рдХреБрд▓ рдЪрд╛рд░ рд╕реНрддрд░ рд╣реИрдВ: error
, warning
, info
рдФрд░ maybe
ред рдкрд╣рд▓реЗ рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ: рдпрджрд┐ рдХреЛрдИ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рдпрдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд▓рд┐рдВрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЛрдб рд▓реМрдЯрд╛рдПрдЧрд╛ред рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рдж рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдкрд╛рда рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ $_
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдЕрдирд╛рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, $x
рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдо рдЗрд╕ рдЪрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ "рдЦрд╛рд▓реА" рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪрд░ рдФрд░ PHP рдЪрд░ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡ рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ "рд╢рд╛рдмреНрджрд┐рдХ" рдЪрд░ рдХреЗ рд╕рд╛рдеред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рд╣рдореЗрдВ рдЕрдХреНрд╕рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░реЛрдВ рдХреА рдмрдЬрд╛рдп рдЕрдЬреНрдЮрд╛рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдПрдХ рдирдпрд╛ рдирд┐рджрд╛рди рд╢реБрд░реВ рдХрд░рдирд╛
рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, test.php
:
<?php function f($x) { parse_str($x);
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╣рдорд╛рд░реЗ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде NoVerify рдЪрд▓рд╛рдПрдВ:
$ noverify -rules myrules.php test.php
рд╣рдорд╛рд░реА рдЪреЗрддрд╛рд╡рдиреА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
WARNING myrules.php:4: parse_str without second argument at test.php:4 parse_str($x); ^^^^^^^^^^^^^
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪреЗрдХ рдХрд╛ рдирд╛рдо рдирд┐рдпрдо рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЗрд╕ рдЪреЗрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрди рдХрд╛ рдирд╛рдо рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ myrules.php:4
ред
рдЖрдк рдЕрдкрдирд╛ рдирд╛рдо @name <name>
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@ рдирд╛рдо рдХрд╛ рдЙрджрд╛рд╣рд░рдг
parse_str($_);
WARNING parseStrResult: parse_str without second argument at test.php:4 parse_str($x); ^^^^^^^^^^^^^
рдЕрдиреНрдп рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдорд┐рдд рдирд┐рдпрдо:
-exclude-checks
рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ-critical
рд▓реЗрд╡рд▓ рдХреЛ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдкрд┐рдЫрд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд╣рдореЗрдВ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, in_array рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП , рд╣рдо рддрд░реНрдХ рдХреЗ рд▓рд┐рдП $strict=true
рдкреВрдЫрддреЗ рд╣реИрдВ рдЬрдм рдкрд╣рд▓рд╛ рддрд░реНрдХ ( $needle
) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░рд┐рдгрд╛рдо рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реИрдВред
рдРрд╕рд╛ рд╣реА рдПрдХ рдлрд┐рд▓реНрдЯрд░ рд╣реИ @type <type> <var>
ред рдпрд╣ рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдЧрдгрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред
in_array($needle, $_);
рдпрд╣рд╛рдБ рд╣рдордиреЗ in_array
рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ in_array
ред рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЗрд╡рд▓ рддрднреА рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреА рдЬрдм $needle
рдХрд╛ рдкреНрд░рдХрд╛рд░ string
ред
рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ @or
рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
$x == $y;
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреИрдЯрд░реНрди рдХреЗрд╡рд▓ рдЙрди ==
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдВ рдХреЛрдИ рднреА рдСрдкрд░реЗрдВрдб рдЯрд╛рдЗрдк string
ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @or
рдмрд┐рдирд╛ рд╕рднреА рдлрд╝рд┐рд▓реНрдЯрд░ @and
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдпреБрдХреНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рджрд╛рди рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ
рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдЖрдк @scope <name>
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@scope all
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди, рд╕рддреНрдпрд╛рдкрди рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;@scope root
- рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рд▓реЙрдиреНрдЪ;@scope local
- рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рд╛рдПрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдмрд╛рд╣рд░ return
рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред PHP рдореЗрдВ, рдпрд╣ рдХрднреА-рдХрднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИ ... рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЗрд╕рдХреА рдирд┐рдВрджрд╛ рдХрд░рддреЗ рд╣реИрдВред
return $_;
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдирд┐рдпрдо рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛:
<?php function f() { return "OK"; } return "NOT OK";
рдЗрд╕реА рддрд░рд╣, рдЖрдк require
рдмрдЬрд╛рдп *_once
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ include
:
require $_; include $_;
рдЕрдм рдЬрдм рдорд┐рд▓рд╛рди рдкреИрдЯрд░реНрди, рдХреЛрд╖реНрдардХ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреИрдЯрд░реНрди (($x))
"рд╕рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯреНрд╕" рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╕ рдХрд┐рд╕реА рднреА рднрд╛рд╡ рдХреЛ рдХреЛрд╖реНрдардХ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддреЗ рд╣реБрдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, $x+$y*$z
рдФрд░ ($x+$y)*$z
рдЬреИрд╕рд╛ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реИрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЯреЛрдХрди (
рдФрд░ )
рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рд╕реЗ рдЖрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдЖрджреЗрд╢ рдЕрдЧрд▓реЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЧреНрд░реБрдкрд┐рдВрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ
рдЬрдм рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдкрд░ phpdoc рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рджреЛрд╣рд░рд╛рд╡ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреА рд╣реИред
рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд┐рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдирд┐рдпрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЕрдкреНрд░рд┐рдп рд╣реЛрдЧрд╛!
{ $x > $y; $x < $y; $x >= $y; $x <= $y; $x == $y; }
рд▓реЗрдЦ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╕рдВрдж рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рд╣реИ: рдЖрдкрдХреЛ рдЙрди рдСрдлрд╝рд░ рдХреЛ +1 рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рджреВрд╕рд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред
рдХреИрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рдирд┐рдпрдо рдПрдХреАрдХреГрдд рд╣реИрдВ

рд▓реЙрдиреНрдЪ рдХреЗ рд╕рдордп, NoVerify рдирд┐рдпрдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ rules
рддрд░реНрдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред
рдЕрдЧрд▓рд╛, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдПрд╕рдЯреА рд╕реЗ , рдЙрдирдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп phpgrep рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рдпрдо рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдлрд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рдХреБрдЫ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╛рдзреНрдп рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдирд┐рдпрдо рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рд╕рдлрд▓рддрд╛ рдХреЛ phpgrep рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдорд┐рд▓рд╛рди рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡реЗ @or
рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ)ред
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдирд┐рдпрдо рддрдВрддреНрд░ рд▓рд╛рдЗрдирд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХрд╛рдлреА рдзреАрдорд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрддрд┐рд╢реАрд▓ рдирд┐рдпрдо рд╣реЛрдВред
рдореИрдЪрд┐рдВрдЧ рдПрд▓рдЧреЛрд░рд┐рджрдо
рднреЛрд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдПрдПрд╕рдЯреА рдиреЛрдб рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рднреА рдЧрддрд┐рд╢реАрд▓ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдпреЛрдЧреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп рд╡реНрдпрд░реНрде рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ: рдХрдИ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрд╕рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдирд┐рдпрдореЛрдВ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд╕рдорд╛рдирд╛рдВрддрд░ рдорд┐рд▓рд╛рди рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИ , рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдПрдирдПрдлрдП рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХреЗрд╡рд▓ рдЧрдгрдирд╛рдУрдВ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЛ "рд╕рдорд╛рдирд╛рдВрддрд░" рдХрд░рддреЗ рд╣реИрдВред
рддреАрди рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
$_ ? $x : $x; explode("", ${"*"}); if ($_);
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрди рддрддреНрд╡ рдФрд░ рдПрдо рдирд┐рдпрдо рд╣реИрдВ, рддреЛ рдПрдХ рднреЛрд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрди * рдПрдо рдСрдкрд░реЗрд╢рди рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд░реИрдЦрд┐рдХ рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ O(N)
рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрджрд┐ рдЖрдк рд╕рднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдореИрдЪ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЛ рд╕реЗ regexp рдкреИрдХреЗрдЬред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдм рддрдХ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдВрд╢рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдКрдкрд░ рдХреА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рдпрдореЛрдВ рдХреЛ рддреАрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдФрд░ рдЙрди рдПрдПрд╕рдЯреА рддрддреНрд╡реЛрдВ рдХреЛ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдирд┐рдпрдо рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рдПрдХ рдЪреМрдереА, рдЦрд╛рд▓реА рд╢реНрд░реЗрдгреА рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рдпрдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдЬрд╛рд░реЛрдВ рдирд┐рдпрдо рд╣реИрдВ рдФрд░ рд╣рдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдордВрджреА рдорд╣рд╕реВрд╕ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдмреАрдЪ, рд╕рдорд╛рдзрд╛рди рдХреА рд╕рд╛рджрдЧреА рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреНрд╡рд░рдг рдореБрдЭреЗ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ @var
рдФрд░ @var
рдбреБрдкреНрд▓рд┐рдХреЗрдЯ @var
, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдирдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред" рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ рд╣реИрдВ:
- рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдкрдардиреАрдп рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ред
- рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд┐рдирд╛ рдЖрдИрдбреАрдИ рд╕реЗ рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╡ рд╕рдорд░реНрдердиред
PhpStorm рдХреЗ рд▓рд┐рдП рдПрдХ php-annotations plugin рд╣реИ, рдЬреЛ рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛, рдПрдиреЛрдЯреЗрд╢рди рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдФрд░ phpdoc рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (2) рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдРрд╕реЗ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдИрдбреАрдИ рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ php-annotations рдкреНрд▓рдЧрдЗрди рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ:
class Filter { public $value; public $type; public $text; }
рдлрд┐рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
@Type($needle, eq=string) @Type($x, not_eq=Foo)
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Filter
рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ (рдкреНрд░рдХрд╛рд░ / рдкрд╛рда / рдЖрджрд┐) рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдереЗ:
@type string $needle @type !Foo $x @type $needle == string @type $x != Foo @type(==) string $needle @type(!=) Foo $x @type($needle) == string @type($x) != Foo @filter type($needle) == string @filter type($x) != Foo
рдлрд┐рд░ рд╣рдо рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд▓рд┐рдд рд╣реБрдП рдФрд░ рднреВрд▓ рдЧрдП рдХрд┐ рдпрд╣ рд╕рдм phpdoc рдХреЗ рдЕрдВрджрд░ рдерд╛, рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛:
(eq string (typeof $needle)) (neq Foo (typeof $x))
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд╕реНрддреА рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рднреА рдЖрд╡рд╛рдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд╖рд╛ рдХреЛ рдЫрдареА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
@eval string $needle typeof = @eval Foo $x typeof <>
рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдХреА рдЦреЛрдЬ рдЕрднреА рднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ ...
рдлреИрди рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдХреА рддреБрд▓рдирд╛
рдлрд╝рд╛рди рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдЦ " рдкреАрдПрдЪрдкреАрдПрд╕рди, рдлрд╛рди рдФрд░ рднрдЬрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреАрдПрдЪрдкреА рдХреЛрдб рдХрд╛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг " рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдирдореВрдирд╛ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рд╣рдо рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ PHP 7.3 рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХреЛрдб рдХрд┐рддрдирд╛ рддреИрдпрд╛рд░ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓-рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ)ред рд╣рдо рд▓рдЧрднрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдереЗ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдХреЛрдИ рдХрдореА рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди 12 рд╕рд╛рд▓ рдореЗрдВ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╣рдордиреЗ рдлрд╝рд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрд╛ рдерд╛ рдЬреЛ рдХрд┐ рд╢рдкрде рд▓реЗрдЧрд╛ рдЕрдЧрд░ рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд () рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд▓рдЧрдЗрди рдХреЛрдб рджрд┐рдЦрддрд╛ рд╣реИ (рд╕реНрд╡рд░реВрдкрдг рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ):
<?php use Phan\AST\ContextNode; use Phan\CodeBase; use Phan\Language\Context; use Phan\Language\Element\Func; use Phan\PluginV2; use Phan\PluginV2\AnalyzeFunctionCallCapability; use ast\Node; class DefineThirdParamTrue extends PluginV2 implements AnalyzeFunctionCallCapability { public function getAnalyzeFunctionCallClosures(CodeBase $code_base) { $def = function(CodeBase $cb, Context $ctx, Func $fn, $args) { if (count($args) < 3) { return; } $this->emitIssue( $cb, $ctx, 'PhanDefineCaseInsensitiv', 'define with 3 arguments', [] ); }; return ['define' => $def]; } } return new DefineThirdParamTrue();
рдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ NoVerify рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<?php define($_, $_, $_);
рд╣рдо рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ - рддрд╛рдХрд┐ рддреБрдЪреНрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдирд┐рд╖реНрдХрд░реНрд╖
рд▓рд┐рдВрдХ, рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА
рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд┐рдВрдХ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЬрдЧрд╣ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ред
рдпрджрд┐ рдЖрдкрдХреЛ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк NoVerify рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред