рдореИрдВ рдмрд╛рдж рдХреА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдореИрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ PHP 5.3 рдореЗрдВ, рдХрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдмрдирд╛рддреА рд╣реИрдВ: Intl рдореЙрдбреНрдпреВрд▓ (рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг), Phar рдореЙрдбреНрдпреВрд▓ (PHP рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░, JAVA рдХреЗ рд▓рд┐рдП JAR рдХреА рддрд░рд╣), mysqlnd (mysql рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдбреНрд░рд╛рдЗрд╡рд░), SPL рдореЗрдВ рд╕реБрдзрд╛рд░ , 10% рддрдХ рдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдХреБрд▓ рд╡реГрджреНрдзрд┐ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред
рдХреНрд▓реЛрдЬрд░ ( рдХреНрд▓реЛрдЬрд░ ) рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди ( рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди ) - PHP 5.3 рдХреЗ рдирд╡рд╛рдЪрд╛рд░, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдирд╛, рдЖрдзреБрдирд┐рдХ рддрдХрдиреАрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рд╣реИрдВред рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, рджреЛрдиреЛрдВ 50 рдХреЗ рджрд╢рдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ LISP рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдФрд░ 70 рдХреЗ рджрд╢рдХ рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдХреЗ рдХрд░реАрдм рдПрдХ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдбреЛрдк рдХрд┐рдП рдЧрдП рдереЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, PHP 40 рд╡рд░реНрд╖реЛрдВ рдХреЗ рдПрдХ рд╕рдХреНрд╖рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝ рдЧрдпрд╛ред
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреНрд▓реЛрдЬрд╝рд░ , рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореБрдХреНрдд рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИрдВред рдЕрдХрд╛рджрдорд┐рдХ рд░реВрдк рд╕реЗ рдХрдареЛрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВ рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдХрднреА рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдКрдВрдЧрд╛ред
рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди, рдПрдХ рд╣реА рд░рд╛рд╕реНрддрд╛ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдПрдореНрдмреЗрдб рдХреА рдЧрдИ рд╣реИ, рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд░ рддрдХ рднреА рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИред рдХрднреА-рдХрднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣ рдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рдм рдХреБрдЫ рд╡рд╣рд╛рдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╡рд╣реА рдЙрджрд╛рд╣рд░рдг, рд▓реЗрдХрд┐рди PHP рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЖрдПрдЧрд╛):
//*** 1j *** function outer(x) // { var y=2; // function inner(a) // { var b=4; // /* * , * */ var res=x+y+a+b; alert(res); // 10 . } inner(3); // } outer(1); // , .
рддреЛ, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд┐рдирд╛ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди, рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░реА рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рдмрдВрдж рдирд╣реАрдВ рд╣реИред
рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ), рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ (рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕рдВрдЦреНрдпрд╛, рд╕рд░рдгреА) рдХреА рддрд░рд╣, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ: рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдЗрд╕реЗ рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ ред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдкрдирд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП " рдЕрдирд╛рдо " рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред
// *** 2j *** adder=function(a,b) // , { return a+b; // } subber=function(a,b) { return ab; } // , /* * - adder subber * , , , * . .. adder subber , , * : x=adder(1,3); x . */ function performAction(action, a, b) // performAction { var result=action(a,b); // action - return result; } function makeDivider() // makeDivider { return function (a,b) // { return a/b; } } r1=adder(1,2); // . r1=1+2; r2=performAction(subber,6,4); // . r2=6-4; r3=performAction(function(a,b) {return a*b;} ,5,6); // . r3=5*6; divider=makeDivider(); // , , r4=divider(16,4); // : r4=16/4; r5=makeDivider()(32,16);// , : r5=32/16; alert([r1,r2,r3,r4,r5]); //3,2,30,4,2
рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рддреЛ рдХреНрд▓реЛрдЬрд░ рднреА рд╕рдордЭ рдореЗрдВ рдЖ рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рджреЛ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИрдВ:
- рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреА рдореВрд▓ рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред
- рдпрджрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрдЪреНрдЪреЗ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд░ рдмрдЪреНрдЪреЗ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд░рд╣реЗрдВрдЧреЗ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдкрд╣рд▓реЗ рд╣реА рдХрд╛рдо рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╛рдиреА рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдУрд╕реНрдкреНрд░реЗ рд╕реЗ рдЪрд░ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдирд╖реНрдЯ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ ред рдпрд╣рд╛рдБ рдПрдХ рдЙрдкрдпреЛрдЧреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Closure test</title> </head> <body> <a href="#" id="link1"></a> <a href="#" id="link2"> </a> <div id="hide1"> </div> <div id="hide2"> </div> <script> // *** 3j *** function getHider(id) // id { return function() { document.getElementById(id).style.display='none'; return false; } /* * , id * . * getHider * , * . */ } document.getElementById('link1').onclick=getHider('hide1'); document.getElementById('link2').onclick=getHider('hide2'); /* * onclick * getHider, , * , id='hide1' * id='hide2' . , * , */ </script> </body> </html>
рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди (рдФрд░ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдЙрдиреНрд╣реЗрдВ) рдХреБрдЫ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдж рдХреА рддрд╛рд░реАрдЦ рддрдХ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╕рд░ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд╛рдкрд╕ PHP рдХреЗ рд▓рд┐рдП ред рдЗрд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрддрдирд╛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ (рднрд╛рд╖рд╛ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░) рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рджреВрд╕рд░реЗ, рдпрд╣ рдХреЗрд╡рд▓ рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ PHP 5.3 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред PHP рдЙрджрд╛рд╣рд░рдг 1j рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
// *** 1p *** function outer($x) // { $y=2; // $inner=function ($a) use ($x, $y) // { $b=4; // /* * , * */ $res=$x+$y+$a+$b; echo $res; // 10 . }; $inner(3); // } outer(1);
рдФрд░ рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг 2j рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
// *** 2p *** $adder=function($a,$b) // , { return $a+$b; // }; $subber=function($a,$b) { return $a-$b; }; // , function performAction($action, $a, $b) // performAction { $result=$action($a,$b); // action - return $result; } function makeDivider() // makeDivider { return function ($a,$b) // { return $a/$b; }; } $r1=$adder(1,2); // . r1=1+2; $r2=performAction($subber,6,4); // . r2=6-4; $r3=performAction(function($a,$b) {return $a*$b;} ,5,6); // . r3=5*6; $divider=makeDivider(); // , , $r4=$divider(16,4); // : r4=16/4; // r5 PHP . //$r5=makeDivider()(32,16);// , : r5=32/16; $r5='php fail'; echo "$r1,$r2,$r3,$r4,$r5"; //3,2,30,4,php fail
PHP рдореЗрдВ рдмреЗрдирд╛рдореА рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
// : function cmp($a, $b) { return($a > $b); } // uasort($array, 'cmp'); // // : uasort($array, function($a, $b) { return($a > $b);});
рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рдФрд░ рдЬрд┐рд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рдХрд╛рдлреА рджреВрд░ рддрдХ рдлреИрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рдЧрд▓рддреА рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╕рднреА рдХреЛрдб рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИрдВ рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди рднреА рднрд░рд╛ рд╣реБрдЖ рдирд╣реАрдВ рд╣реИред
рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ PHP рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдереЗред Create_function рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИ? рд╣рд╛рдБ рдФрд░ рдирд╣реАрдВред create_function рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди (sic!) рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдирд╛рдо \ 0 (рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдРрд╕реЗ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреБрдордирд╛рдо рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╡реИрд╕реЗ, create_function рдЗрд╕ "рдЕрдирд╛рдо" рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, PHP 5.3 рдореЗрдВ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рди рд╣реИ:
// , PHP 4!: uasort($array, create_function('$a, $b','return $a > $b;'));
рд╣рдореЗрдВ PHP рдореЗрдВ рдХреНрд▓реЛрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдореИрдВ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВред рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
function getModernIncrementer() { $x=0; return function() use(&$x) // ! { return $x++; }; } $incrementer2=getModernIncrementer(); echo $incrementer2(), $incrementer2(), $incrementer2();//012
рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рдЪрд░ рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░рд▓, рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдХрдо рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
function incrementer() { static $x=0; return $x++; } echo incrementer(),incrementer(),incrementer(); //012
рдХреЙрд▓реНрд╕ рдХреЗ рдмреАрдЪ рдЬрдЯрд┐рд▓ рд░рд╛рдЬреНрдп рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, OOP рдореМрдЬреВрдж рд╣реИред рд╡реИрд╕реЗ, PHP 5.3 рдореЗрдВ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдИрдорд╛рдирджрд╛рд░ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ ... рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ ... рдзреНрдпрд╛рди рджреЗрдВ, рдзреНрдпрд╛рди рджреЗрдВ:
var_dump(function(){return 1;}); // object(Closure)#1 (0) { }
рдлрд╝рдВрдХреНрд╢рди рдХреНрд▓реЛрдЬрд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИ - рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рдЖрдкрдХрд╛ рдУрдУрдкреА рд╣реИред рдФрд░ рддрд╛рдХрд┐ рд╡рд╕реНрддреБ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╣рд░ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХреЗ, PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ "рдореИрдЬрд┐рдХ" рд╡рд┐рдзрд┐ __inv рдЯреЛрдкреА рдХреЗ рд╕рд╛рде рдЖрдП:
class Test { public function __invoke () { return 123; } } $func = new Test(); echo $func(); //123
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдЕрдирд╛рдо рдХрд╛рд░реНрдп рдФрд░ рдХреНрд▓реЛрдЬрд░ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИрдВред рдФрд░ рдХрд┐рд╕реА рднреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдХреА рддрд░рд╣, рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╡реЗ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдардиреАрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрд▓реЛрдЬрд╝рд░ рдХреЛ рдЕрдХреНрд╕рд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди PHP рдореЗрдВ, рд▓рдЧрднрдЧ рдХреЛрдИ рднреА GUI рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ ( рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рд░реАрдЧрд░ рдореМрдЬреВрдж рд╣реИрдВ ), рдФрд░ рдЗрд╕рдХреЗ рдХреБрдЫ рдХрд╛рд░рдг рд╣реИрдВ - PHP рдЕрднреА рднреА рдПрдХ рд╡реЗрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ, рди рдХрд┐ рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧред рдЗрд╕рд▓рд┐рдП, рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ preg_replace_callback , array_filter, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ , рдкрд╛рдпрдерди рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ GUI рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ: рдореИрдВ JQuery рдХреЗ рд╕рд╛рде рдХреНрд▓реЛрдЬрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рд╡реЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ, рд╣реИрдВрдбрд▓рд░, рдФрд░ рдЙрдирдореЗрдВ, рдирд┐рд░рдВрддрд░ (рдпрджреНрдпрдкрд┐ рдЬрд▓реНрджреА, рд▓реЗрдХрд┐рди рдмрджрд╕реВрд░рдд) рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ DOM рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдЪрд░ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рдВрдЫрд┐рдд рд╡рд╕реНрддреБ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдмрдВрдж рд╣реИ)ред рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ hi-tech.mail.ru рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреГрд╖реНрда рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ( рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдкреНрд▓рдЧрдЗрди рдЬреИрд╕рд╛ рд╣реИ), рдЬрдмрдХрд┐ рд╢реБрд░реВ рдореЗрдВ рдкреГрд╖реНрда рдХреЗ HTML рдХреЛрдб рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдорд╛рд░реНрдХрдЕрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред ред
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>dynaedit</title> <style type="text/css"> .msg, .edt {font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-size: 10pt} .msg {background-color:#DDf; border: 1px solid #000; padding:2px} .edt {margin:-2px 0 -2px -1px; padding:0; width:100%; height:100%; border 0} </style> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <script> $(document).ready(function() { $("#admin").click(function() { $(this).remove(); $("p.msg").each(function() { var msg_id=this.id.substr(1); // this? each! var msg=$(this); // JQuery DOM <p> $("<input/>", // { type: "button", value: " #"+msg_id, click: function StartEdit() // p textarea { var edt=$("<textarea/>", // textarea, p { 'class':'edt', value:msg.html().replace(/<br[^>]*>/gim,"\n"), // msg? => height:msg.height(), }).appendTo(msg.empty()); $(this).val(" #"+msg_id).unbind().click(function() // { //$.post("/ajax/savemessage",{msg_id:msg_id, msg:edt.val()}, function(data){}); // msg.html(edt.remove().val().replace(/\n/gm,"<br />")); // textarea, $(this).val(" #"+msg_id).unbind().click(StartEdit);// , return false; });//Save return false; } //StartEdit() }).insertAfter(this);//<input/> });//$("p.msg").each return false; });//$("#admin").click });//$(document).ready </script> </head> <body> <p id="p1234" class="msg"> <br /> !</p> <p id="p1235" class="msg"> <br /> !<br />PS Just 4 lulz</p> <p><a href="#" id="admin"> !</a></p> </body> </html>
рдирд┐рд╖реНрдард╛ рд╕реЗ,
рдЕрдиреБрд╕рдВрдзрд╛рди рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╡рд┐рднрд╛рдЧ Mail.Ru