рдкреАрдПрдЪрдкреАред рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдкрд░ рдордВрддреНрд░рдореБрдЧреНрдз рдХрд░рдирд╛


PHP рдорд╛рдЗрдХреНрд░реЛ-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ, рдЗрддрдиреА рдкреНрд░рддрд┐рдпрд╛рдВ рддреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдирдИ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рдпрд╣ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдореБрдЦреНрдп рдЬреЛрд░ рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдВрджрд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреНрдпрд╛рдЧ


  1. рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдиреИрдиреЛрд╕реЗрдХрдВрдб рдкрд░ рдмрдЪрдд рд╣реИ, рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдЗрдХреНрд░реЛрдПрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╢рди рдкрд░ рдЦреЛрдП рд╣реБрдП рд╕рдордп рдХреЛ рдЦреЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╕рдВрдХрд▓рди рд╕рдордп рдХреЗ "рдЕрдиреБрдХреВрд▓рди" рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИред
  2. рдореИрдВ рдХреЗрд╡рд▓ рд╕рд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдХреЛрдб рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХрдЯреМрддреА рдХрд░реВрдВрдЧрд╛ред
  3. рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВрдиреЗ PHP 7.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ


рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХрд▓ рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреА рд╣реИред

рдПрдХрд▓ рдЙрджреНрдзрд░рдг рдЗрд╕ рддрд░рд╣ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

statement -> expr -> scalar -> dereferencable_scalar -> T_CONSTANT_ENCAPSED_STRING 

рдРрд╕рд╛ рдбрдмрд▓:

 statement -> expr -> scalar -> '"' encaps_list '"' ->        ,  ,     

PHP microoptimifications рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдкреНрд░рд┐рдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧреВрдВрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХреНрд░рдордмрджреНрдз рд╣реИрдВред

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЗрдХреЛ :

 statement -> T_ECHO echo_expr_list -> echo_expr_list ->  echo_expr -> expr 

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ :

 statement -> expr -> T_PRINT expr -> expr ( ) 

рдпрд╛рдиреА рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рд╛рдБ, рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рдХрд╛ рдПрдХ рдХрджрдо рдкрд╣рд▓реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрджрдо, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рд▓реЗрдЦ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдмрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рдВрдХрд▓рди рдХреЗ рдЪрд░рдг рдореЗрдВ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдПрдХрд▓ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рд┐рдВрдЯ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдпрд╛рдВ рдЦреЛ рджреЗрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдЦреИрд░, рддрд╛рдХрд┐ рджреЛ рдмрд╛рд░ рдЙрдардирд╛ рди рдкрдбрд╝реЗред рдкреНрд░рд┐рдВрдЯ рдФрд░ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рд╕рдВрдХрд▓рди рдХреЗ рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

 1 - void zend_compile_print(znode *result, zend_ast *ast) /* {{{ */ 1 + void zend_compile_echo(zend_ast *ast) /* {{{ */ 2 2 { 3 3 zend_op *opline; 4 4 zend_ast *expr_ast = ast->child[0]; 5 5 6 6 znode expr_node; 7 7 zend_compile_expr(&expr_node, expr_ast); 8 8 9 9 opline = zend_emit_op(NULL, ZEND_ECHO, &expr_node, NULL); 10 - opline->extended_value = 1; 11 - 12 - result->op_type = IS_CONST; 13 - ZVAL_LONG(&result->u.constant, 1); 10 + opline->extended_value = 0; 14 11 } 

рдареАрдХ рд╣реИ, рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ - рд╡реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рд┐рдВрдЯ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдПрдХ рдмрд░рд╛рдмрд░ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ 1. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХреЗ рд╕рд╛рде рдЖрдк рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд░рд▓ рд░реЗрдЦрд╛, рдХреЛрдИ рддрд╛рдордЭрд╛рдо рдирд╣реАрдВ


рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ echo 'Some string'; рдФрд░ echo "Some string"; рд▓рдЧрднрдЧ 2 (рдЕрд╕реНрд╡реАрдХрд░рдг P2) рдЯреЛрдХрди рдореЗрдВ рд▓рдЧрднрдЧ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

 T_ECHO: echo T_ENCAPSED_AND_WHITESPACE/T_CONSTANT_ENCAPSED_STRING: "Some string" 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХрд▓ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ T_CONSTANT_ENCAPSED_STRING рдФрд░ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрдм рдпрд╣ рдкрд╕рдВрдж рдЖрдПред рдпрджрд┐ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХреЛрдИ рд╕реНрдерд╛рди рд╣реИ, рддреЛ T_ENCAPSED_AND_WHITESPACEред

Opcodes рдЕрдкрдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдФрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реЛрдЧрд╛:

 line #* EIO op fetch ext return operands ----------------------------------------------------------- 4 0 E > ECHO 'Some string' 


рдирд┐рд╖реНрдХрд░реНрд╖


рдпрджрд┐ рдЖрдк рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдХреБрдЫ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрдХреНрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ, рдирд┐рд░рдВрддрд░ рддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХрд▓ рдЙрджреНрдзрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЧрддрд┐рд╢реАрд▓ рд▓рд╛рдЗрди


4 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред

 echo "Hello $name! Have a nice day!"; echo 'Hello '.$name.'! Have a nice day!'; echo 'Hello ', $name, '! Have a nice day!'; printf ('Hello %s! Have a nice day!', $name); 

рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП:

 T_ECHO: echo T_ENCAPSED_AND_WHITESPACE: Hello T_VARIABLE: $name T_ENCAPSED_AND_WHITESPACE: ! Have a nice day! 

рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП (рддреАрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рднреА, рдХреЗрд╡рд▓ рдЕрд╡рдзрд┐ рдХреЗ рдмрдЬрд╛рдп рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╣реЛрдВрдЧреЗ):

 T_ECHO: echo T_CONSTANT_ENCAPSED_STRING: 'Hello ' string: . T_VARIABLE: $name string: . T_CONSTANT_ENCAPSED_STRING: '! Have a nice day!' 

рдЪреМрдереЗ рдХреЗ рд▓рд┐рдП:

 T_STRING: printf T_CONSTANT_ENCAPSED_STRING: 'Hello %s! Have a nice day!' string: , T_VARIABLE: $name 

рд▓реЗрдХрд┐рди рдСрдкрдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рд╣реЛрдЧрд╛ред

рдкрд╣рд▓рд╛ рдПрдХ:

 echo "Hello $name! Have a nice day!"; line #* EIO op fetch ext return operands ----------------------------------------------------------- 3 0 E > ASSIGN !0, 'Vasya' 4 1 ROPE_INIT 3 ~3 'Hello+' 2 ROPE_ADD 1 ~3 ~3, !0 3 ROPE_END 2 ~2 ~3, '%21+Have+a+nice+day%21' 4 ECHO ~2 

рджреВрд╕рд░рд╛:

 echo 'Hello '.$name.'! Have a nice day!'; line #* EIO op fetch ext return operands ----------------------------------------------------------- 3 0 E > ASSIGN !0, 'Vasya' 4 1 CONCAT ~2 'Hello+', !0 2 CONCAT ~3 ~2, '%21+Have+a+nice+day%21' 3 ECHO ~3 

рддреАрд╕рд░рд╛:

 echo 'Hello ', $name, '! Have a nice day!'; line #* EIO op fetch ext return operands ----------------------------------------------------------- 3 0 E > ASSIGN !0, 'Vasya' 4 1 ECHO 'Hello+' 2 ECHO !0 3 ECHO '%21+Have+a+nice+day%21' 

рдЪреМрдерд╛:

 printf ('Hello %s! Have a nice day!', $name); line #* EIO op fetch ext return operands ----------------------------------------------------------- 3 0 E > ASSIGN !0, 'Vasya' 4 1 INIT_FCALL 'printf' 2 SEND_VAL 'Hello+%25s%21+Have+a+nice+day%21' 3 SEND_VAR !0 4 DO_ICALL 

рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ `рдкреНрд░рд┐рдВрдЯрдл` рд╡рд╛рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╣рд▓реЗ рддреАрди рд╕реЗ рдЧрддрд┐ рдореЗрдВ рдЦреЛ рдЬрд╛рдПрдЧрд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдВрдд рдореЗрдВ рдЕрднреА рднреА рд╡рд╣реА рдИрд╕реАрдПрдЪрдУ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╕реНрд╡рд░реВрдкрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛рдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реИ - рддреАрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреНрд░рдо рдХреЗ, рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдЕрдЬреАрдм рдЖрд░рдУрдкреАрдИ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдореБрджреНрд░рд┐рдд рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред PHP рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░реЙрдХреЗрдЯ рд╕рд╛рдЗрдВрд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ C-shny fputs рдирд╣реАрдВ рд╣реИ ред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдЧреЗрдВрдж рдореБрдЦреНрдп / рдЖрдЙрдЯрдкреБрдЯ.рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ php_output_write рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ ред

Concatред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╣рдо рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рддрд╛рд░ рдореЗрдВ рддрд░реНрдХ рдФрд░ рддреЗрдЬреА рд╕реЗ рдореЗрдореНрдХрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ zend_string рдмрдирд╛рддреЗ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде, рдПрдХ рд╣реА рдмрд╛рдЗрдЯ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рдирдИ рд▓рд╛рдЗрдиреЗрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреАред

рд▓реЗрдХрд┐рди ROPE_INIT, ROPE_ADD рдФрд░ ROPE_END рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рд╣рд╛рдереЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:

  1. ROPE_INIT (ext = 3, return = ~ 3, рдСрдкрд░реЗрдВрдб = 'Hello +')
    рд╣рдо рддреАрди рд╕реНрд▓реЙрдЯ (рдПрдХреНрд╕рдЯ) рд╕реЗ "рд░рд╕реНрд╕реА" рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ 0 рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рд╣реИрд▓реЛ +' (рдСрдкрд░реЗрдВрдб) рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ "рд░рд╕реНрд╕реА" рд╡рд╛рд▓реЗ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ ~ 3 (рд░рд┐рдЯрд░реНрди) рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
  2. ROPE_ADD (ext = 1, return = ~ 3, рдСрдкрд░реЗрдВрдб = ~ 3; 0!)
    рд╣рдо "рд░рд╕реНрд╕реА" ~ 3 (рдСрдкрд░реЗрдВрдб) рдХреЗ рд╕реНрд▓реЙрдЯ 1 (ext) рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рд╡рд╛рд╕реНрдпрд╛' рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ! 0 (рдСрдкрд░реЗрдВрдбреНрд╕) рдФрд░ "рд░рд╕реНрд╕реА" ~ 3 (рд░рд┐рдЯрд░реНрди) рд╡рд╛рдкрд╕ рдХрд░реЗрдВред
  3. ROPE_END (ext = 2, return = ~ 2, рдСрдкрд░реЗрдВрдб = ~ 3, '% 21 + рд╣реИ + рдПрдХ + рдЕрдЪреНрдЫрд╛ + рджрд┐рди% 21')
    рд╣рдо рдкрдВрдХреНрддрд┐ 2 (ext) рдореЗрдВ '% 21 + рд╣реИ + a + рдЕрдЪреНрдЫрд╛ + рджрд┐рди% 21' (рдСрдкрд░реЗрдВрдб) рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ zend_string рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА "рд░рд╕реНрд╕реА" рд╕реНрд▓реЙрдЯ рдХреЛ рдЙрд╕реА ccpy рдХреЗ рд╕рд╛рде рдмрджрд▓реЗ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдЕрд▓рдЧ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдВрдХ рд╕реНрд▓реЙрдЯ рдореЗрдВ рд░рдЦреЗ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдХреЛрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд╣реБрдд рд╕реБрдВрджрд░ред :)

рдЪрд▓реЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХред рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ zend_vm_execute.h (IMHO рдпрд╣ рд╕рд╣реА рд╣реЛрдЧрд╛) 71 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ 100 рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП 100 рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо (рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдк 10 рдмрд╛рд░ рд╢реБрд░реВ рд╣реБрдИ, рд╕рдмрд╕реЗ рдЖрдо рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реБрдП):

 <?php $file = explode("\n", file_get_contents("C:\projects\C\php-src\Zend\zend_vm_execute.h")); $out = []; for ($c = 0; $c < 100; $c++) { $start = microtime(true); ob_start(); $i = 0; foreach ($file as $line) { $i++; // echo 'line: ', $i, 'text: ', $line; // echo 'line: ' . $i . 'text: ' . $line; // echo "line: $i text: $line"; // printf('line: %d text: %s', $i, $line); } ob_end_clean(); $out[] = (microtime(true) - $start); } $min = min($out); $max = max($out); echo (array_sum($out) - $min - $max) / 98; 

рд╣рдо рдХреНрдпрд╛ рдорд╛рдкрддреЗ рд╣реИрдВрд╕реЗрдХрдВрдб рдореЗрдВ рдФрд╕рдд рд╕рдордп
"рд░рд╕реНрд╕реА"0.0129
рдХрдИ ECHO0.0135
рдХрдбрд╝реА0.0158
рдкреНрд░рд┐рдВрдЯрдл , рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП0.0245

рдирд┐рд╖реНрдХрд░реНрд╖


  1. рд╕рд░рд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рддрд╛рд░ рдХреЗ рд▓рд┐рдП, рдПрдХрд╛рдПрдХ, рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдХреЗ рд╕рднреА рдПрдХрд▓ рдЙрджреНрдзрд░рдг рд╕реЗ рдПрдХрд▓ рдЙрджреНрдзрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рд╣реИрдВред рдФрд░ рдЬрд┐рддрдиреА рд▓рдВрдмреА рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрддрдирд╛ рдЕрдзрд┐рдХ рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИред
  2. рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рддрд░реНрдХ ... рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред рдорд╛рдк рд╕реЗ, рдпрд╣ "рд░рд╕реНрд╕реА" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрддрд┐ рдФрд░ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ "рдЪрд░" рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


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

рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд┐рд╡рд░реНрдЧреАрдЬрд╝рдиреА рдирдЬрд╝рд░ рдХреА рд╡рдЬрд╣ рд╕реЗ рд╕рдорд╡рд░реНрддреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕реЗ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреБрдирд╢реНрдЪ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рдореБрдЭреЗ рдмрддрд╛рдПрдВ - рдПрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ: рд╡реАрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА, рд╡реАрдПрд╕ рдХреЗ рд▓рд┐рдП рд╡реАрдЖрд░рдИрдЪ, рдЖрдкрдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП ... :)

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг


HEREDOC рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ "рдЬрдЯрд┐рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕" (рдЬрд╣рд╛рдВ рдЪрд░ рдЕрдВрджрд░ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рд╣реИрдВ) рд╕рдорд╛рди рдбрдмрд▓-рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реИрдВ рдФрд░ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ HTML рдХреЗ рд╕рд╛рде PHP рдХрд╛ рдорд┐рд╢реНрд░рдг:
 <?php $name = 'Vasya';?>Hello <?=$name?>! Have a nice day! 

рдпрд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рд┐рд░реНрдл 3 рдЧреВрдВрдЬ рд╣реИред

Source: https://habr.com/ru/post/hi447416/


All Articles