PHP 5.3 рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рдЗрд╕рдХреЗ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░рд┐рд▓реАрдЬ рдХреЗ рдХрдИ рд╕рд╛рд▓ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рдЗрд╕ рднрд╛рд╖рд╛ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорд╛рдирдХ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдкреАрдПрдЪрдкреА рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ - рдПрдХ рдмрдВрдж рдФрд░ PHP рдореЗрдВ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХреНрдпрд╛ рд╣реИрдВред
$g = 'test'; $c = function($a, $b) use($g){ echo $a . $b . $g; }; $g = 'test2'; var_dump($c);
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реИрдореНрдмрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рдПрдХ рдХреНрд▓реЛрдЬрд░, рдХреНрд▓реЛрдЬрд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬреЛ рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, PHP5.3 рдореЗрдВ __inoke рдореИрдЬрд┐рдХ рд╡рд┐рдзрд┐ рд╢реБрд░реВ рдХреА рдЧрдИ рдереАред
function getClosure() { $g = 'test'; $c = function($a, $b) use($g){ echo $a . $b . $g; }; $g = 'test2'; return $c; } $closure = getClosure(); $closure(1, 3);
рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкреИрд░реЗрдВрдЯ рд╕реНрдХреЛрдк рд╕реЗ рд▓реИрдореНрдмрдбрд╛ рдлрдВрдХреНрд╢рди рдХреЗ рд▓реЛрдХрд▓ рд╕реНрдХреЛрдк рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╡рд╛рд░рд┐рд╕ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд╛рдХреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИред рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рднрд╛рд╖рд╛ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдЖрдзреБрдирд┐рдХ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдЙрдирдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди
рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред PHP рдореЗрдВ рдХрдИ рдорд╛рдирдХ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдХреЙрд▓рдмреИрдХ рдкреНрд░рдХрд╛рд░ рдпрд╛ рдЗрд╕рдХреЗ рд╕рдорд╛рдирд╛рд░реНрдердХ рдХреЙрд▓ рдпреЛрдЧреНрдп рдХреЛ PHP 5.4 рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ array_filter, array_map, array_reduceред Array_map рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рддреБрд░рдВрдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд▓реВрдк рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рд░рдгреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереАред рдЖрдЗрдП рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
$x = range(1, 100000); $t = microtime(1); $x2 = array_map(function($v){ return $v + 1; }, $x);
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЧрд┐рд░рд╛рд╡рдЯ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рд╣реИред рдпрджреНрдпрдкрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рд┐рдВрдереЗрдЯрд┐рдХ рд╣реИ, рдмрдбрд╝реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдХрд╛рд░реНрдп рдЕрдХреНрд╕рд░ рдЙрдарддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╣ рд╕реНрдерд╛рди рдмрди рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдХрд╛рдлреА рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛ред рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдлрд┐рд░ рднреА, рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрд╣реАрдВ рдФрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдмреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдХреЙрд▓рдмреИрдХ рд╕рд░рдгреА рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде - рдЕрдм рд╣рдо рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рд╕реНрдХреЗрдмрд▓реНрд╕ рдХреЛ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
$x = array_filter($data, function($v){ return $v > 0; });
рдШрдЯрдирд╛рдХреНрд░рдоред
рдХреНрд▓реЛрдЬрд░ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрджрд░реНрд╢ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рддрд░реНрдХ рдирд┐рдХрд╛рд▓рдирд╛, рдПрдХ рдУрд░, рдХреЛрдб рдХреНрд▓реАрдирд░ рдмрдирд╛рддрд╛ рд╣реИ, рджреВрд╕рд░реА рдУрд░, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ - рдХрднреА-рдХрднреА рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреМрди рд╕реЗ рд╣реИрдВрдбрд▓рд░ рд▓рдЯрдХрд╛рдП рдЧрдП рд╣реИрдВред
рдорд╛рдиреНрдпрддрд╛
рдХреНрд▓реЛрдЬрд╝рд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЪрд░ рдореЗрдВ рдХреБрдЫ рддрд░реНрдХ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдпрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣реА рдЪрд╛рд╣рд┐рдП:
$notEmpty = function($v){ return strlen($v) > 0 ? true : тАЬ тАЭ; }; $greaterZero = function($v){ return $v > 0 ? true : тАЬ тАЭ; }; function getRangeValidator($min, $max){ return function($v) use ($min, $max){ return ($v >= $min && $v <= $max) ? true : тАЬ тАЭ; }; }
рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ - рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореВрд▓реНрдп рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реИрд▓рд┐рдбреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
class UserForm extends BaseForm{ public function __constructor() { $this->addValidator('email', Validators::$notEmpty); $this->addValidator('age', Validators::getRangeValidator(18, 55)); $this->addValidator('custom', function($v){
рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧ, рдореЙрдбрд▓ рдЖрджрд┐ рдХреЗ рдмрд╕рдиреЗ рдФрд░ рдкрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдореЗрдВ рд╡реИрдзрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдШреЛрд╖рдгрд╛рддреНрдордХ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдирд┐рдпрдореЛрдВ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдирд┐рдпрдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред
рднрд╛рд╡
рдХреНрд▓реЛрдЬрд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рдореНрдлрдиреА рдХрд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдпреЛрдЧ рд╣реИред
ExprBuilder рд╡рд░реНрдЧ рдПрдХ рдЗрдХрд╛рдИ
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдлреЙрд░реНрдо рдХреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
... ->beforeNormalization() ->ifTrue(function($v) { return is_array($v) && is_int(key($v)); }) ->then(function($v) { return array_map(function($v) { return array('name' => $v); }, $v); }) ->end() ...
рд╕рд┐рдореНрдлрдиреА рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрд╕реНрдЯреЗрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВ, рдпрджрд┐ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ)ред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕ рд░реВрдк рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ:
$expr = new Expression(); $expr ->if(function(){ return $this->v == 4;}) ->then(function(){$this->v = 42;}) ->else(function(){}) ->elseif(function(){}) ->end() ->while(function(){$this->v >=42}) ->do(function(){ $this->v --; }) ->end() ->apply(function(){}); $expr->v = 4; $expr->exec(); echo $expr->v;
рдЖрд╡реЗрджрди, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд▓реНрдХрд┐ рдЬрдЯрд┐рд▓ рд╣реИ - рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдПрдХ рдкреЗрдбрд╝ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рджрд┐рд▓рдЪрд╕реНрдк рдЕрд╡рдзрд╛рд░рдгрд╛, рд╢рд╛рдпрдж рдХрд╣реАрдВ рдРрд╕рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдорд╛рд░реНрдЧ
рдХрдИ рдорд┐рдиреА-рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЕрдм рдЧреБрдордирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИред
App::router('GET /users', function() use($app){ $app->response->write('Hello, World!'); });
рдЖрд░рд╛рдорджрд╛рдпрдХ рдкрд░реНрдпрд╛рдкреНрдд рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддред
рдХреИрд╢рд┐рдВрдЧ
рдПрдХ рд╣рдм рдкрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд░реНрдЪрд╛ рдореЗрдВ рдерд╛, рдлрд┐рд░ рднреАред
$someHtml = $this->cashe->get('users.list', function() use($app){ $users = $app->db->table('users)->all(); return $app->template->render('users.list', $isers); }, 1000);
рдпрд╣рд╛рдВ, рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рдХреБрдВрдЬреА 'users.list' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╢ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреА рдЕрд╡рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдСрди-рдбрд┐рдорд╛рдВрдб рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЗрд▓рд░ рд╕реЗрд╡рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХреБрдЫ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд░ рдмрд╛рд░ рдЗрд╕реЗ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╣рдо рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╣реЛрдЧрд╛ред
рд╡рд╕реНрддреБ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди
рдХрднреА-рдХрднреА рдХрд┐рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ, рдкреБрд░рд╛рдиреЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ, рдЖрджрд┐ред рдпрд╣рд╛рдВ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред PHP5.3 рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред
class Base{ public function publicMethod(){echo 'public';} private function privateMethod(){echo 'private';}
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдкреБрд░рд╛рдиреА рдкрджреНрдзрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЗрд╕реЗ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, PHP 5.4 рдореЗрдВ, рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдВрдж рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред
$closure = function(){ return $this->privateMethod(); } $closure->bindTo($b, $b);
рдмреЗрд╢рдХ, рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрд╢реЛрдзрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рдЬреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ
GET рд╕рд░рдгреА рд╕реЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдпрджрд┐ рдпрд╣ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
$name = Input::get('name', function() {return 'Fred';});
рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рдХрд╛рд░реНрдп
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред рдореИрдВ
рд▓рд┐рдерд┐рдпрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛
public function write($type, $message) { $config = $this->_config + $this->_classes; return function($self, $params) use ($config) { $params += array('timestamp' => strtotime('now')); $key = $config['key']; $key = is_callable($key) ? $key($params) : String::insert($key, $params); $cache = $config['cache']; return $cache::write($config['config'], $key, $params['message'], $config['expiry']); }; }
рд╡рд┐рдзрд┐ рдПрдХ рдХреНрд▓реЛрдЬрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рддрдм рдХреИрд╢ рдХреЛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд╛рд╕ рдХрд░реЗрдВ
рдХрднреА-рдХрднреА рди рдХреЗрд╡рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдХрдИ рд▓рд┐рдВрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд┐рдП рдЧрдП рдереЗ, рдФрд░ рдЗрди рд▓рд┐рдВрдХ рдХреЗ рдкрддреЗ рдореЗрдВ рдЙрдирдХрд╛ рд▓реЙрдЧрд┐рди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред
рдкреБрдирд░рд╛рд╡рд░реНрддреА рдмрдВрдж рдкрд░рд┐рднрд╛рд╖рд╛
рдЕрдВрдд рдореЗрдВ, рдХреИрд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдмрдВрдж рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓реЛрдЬрд░ рд╕рдВрджрд░реНрдн рдкрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛
$factorial = function( $n ) use ( &$factorial ) { if( $n == 1 ) return 1; return $factorial( $n - 1 ) * $n; }; print $factorial( 5 );
рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рддрдирд╛ рд╣реБрдЖ рджрд┐рдЦрддрд╛ рд╣реИред рдХрд┐рддрдиреЗ рд╕рд╛рд▓ рдЙрдирдХреЗ рдмрд┐рдирд╛ рд░рд╣реЗ - рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдХреНрд▓реЛрдЬрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкреАрдПрдЪрдкреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛ рджреЗрдЧрд╛ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рджрдХреНрд╖рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧрд╛ред рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреА рд╕реЛрдЪ рдХреЛ рдирдП рдкреНрд░рддрд┐рдорд╛рди рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдпрд╣ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдЬреИрд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдпрд╣рд╛рдВ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рдкрд╛рдпрд╛ред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВред рдзрдиреНрдпрд╡рд╛рдж!