ุชุฑุชูŠุจ ุงู„ุชู‚ูŠูŠู… ููŠ PHP

ู…ู„ุงุญุธุฉ ุงู„ู…ุชุฑุฌู…. ู‚ุฏู… ู†ูŠูƒูŠุชุง ุจูˆุจูˆู ูˆู„ุง ูŠุฒุงู„ ูŠู‚ุฏู… ู…ุณุงู‡ู…ุฉ ูƒุจูŠุฑุฉ ููŠ ุชุทูˆูŠุฑ ู„ุบุฉ PHP. ุฅู†ู‡ ูŠูู‡ู… ุงู„ุฃุฌุฒุงุก ุงู„ุฏุงุฎู„ูŠุฉ ู„ู…ุญุฑูƒ PHP ุฌูŠุฏู‹ุง ูˆููŠ ู‡ุฐู‡ ุงู„ู…ู‚ุงู„ุฉ ูŠุดุฑุญ ุจุนุถ ู…ูŠุฒุงุช PHP ู…ู† ุญูŠุซ ุชุฑุชูŠุจ ุชู‚ูŠูŠู… ุงู„ุชุนุจูŠุฑ ุŒ ูˆุงู„ุชูŠ ุŒ ุฑุจู…ุง ุŒ ู„ุง ุชูˆุฌุฏ ุจุดูƒู„ ุฎุงุต ููŠ ุฃูŠ ู…ูƒุงู†. ูŠุจู„ุบ ุนู…ุฑ ู‡ุฐู‡ ุงู„ู…ู‚ุงู„ุฉ ุญูˆุงู„ูŠ 7 ุณู†ูˆุงุช ูˆู„ู… ุชูู‚ุฏ ุฃู‡ู…ูŠุชู‡ุง ุนู…ู„ูŠู‹ุง ุŒ ูˆู…ุน ุฐู„ูƒ ุŒ ู…ู† ุงู„ุตุนุจ ุงู„ุนุซูˆุฑ ุนู„ูŠู‡ุง ุŒ ู„ุฃู†ู‡ุง ู„ูŠุณุช ููŠ ู…ุฏูˆู†ุฉ ู†ูŠูƒูŠุชุง ุจูˆุจูˆู ุŒ ูˆู„ูƒู†ู‡ุง ู…ู†ุดูˆุฑุฉ ููŠ ุฌูˆู‡ุฑู‡ ุนู„ู‰ ุฌูŠุซุจ. ุฃุนุชู‚ุฏ ุฃู†ู‡ ุณูŠูƒูˆู† ู…ู† ุงู„ู…ููŠุฏ ุชู‚ุฏูŠู…ู‡ ุฅู„ู‰ ุงู„ู…ุฌุชู…ุน ุจุงู„ู„ุบุฉ ุงู„ุฑูˆุณูŠุฉ.



ููŠ ู…ุฌุชู…ุน reddit ุงู„ู…ูุถู„ ู„ุฏูŠ ุŒ ุตุงุฏูุช ู…ู†ุดูˆุฑู‹ุง ูŠูุงุฌุฃ ููŠู‡ ุงู„ู†ุงุณ ุจู†ุชูŠุฌุฉ ุงู„ูƒูˆุฏ ุงู„ุชุงู„ูŠ:



<?php

$a = 1;
$c = $a + $a++;
var_dump($c); // int(3)

$a = 1;
$c = $a + $a + $a++;
var_dump($c); // int(3)


ูƒู…ุง ุชุฑูˆู†ุŒ ูˆุชุนุจูŠุฑุงุช ($a + $a++)ูˆ ($a + $a + $a++)ุชุนุทูŠ ู†ูุณ ุงู„ู†ุชูŠุฌุฉุŒ ูˆู‡ูŠ ุบูŠุฑ ู…ุชูˆู‚ุน ุชู…ุงู…ุง. ู…ุงุฐุง ูŠุญุฏุซ ู‡ู†ุงุŸ



ุฃุณุจู‚ูŠุฉ ุงู„ุนุงู…ู„ ูˆุชุฑุงุจุทู‡



ูŠุนุชู‚ุฏ ุงู„ูƒุซูŠุฑ ู…ู† ุงู„ู†ุงุณ ุฃู† ุงู„ุชุฑุชูŠุจ ุงู„ุฐูŠ ูŠุชู… ุชู‚ูŠูŠู… ุงู„ุชุนุจูŠุฑ ุจู‡ ูŠุชู… ุชุญุฏูŠุฏู‡ ู…ู† ุฎู„ุงู„ ุฃุณุจู‚ูŠุฉ ูˆุชุฑุงุจุท ุงู„ู…ุดุบู„ูŠู† ุŒ ูˆู„ูƒู† ู‡ุฐุง ู„ูŠุณ ู‡ูˆ ุงู„ุญุงู„. ุชุญุฏุฏ ุงู„ุฃูˆู„ูˆูŠุฉ ูˆุงู„ุชุฑุงุจุท ูู‚ุท ุงู„ุชุฑุชูŠุจ ุงู„ุฐูŠ ูŠุชู… ููŠู‡ ุชุฌู…ูŠุน ุงู„ุนู…ู„ูŠุงุช ููŠ ุชุนุจูŠุฑ.

ููŠ ุงู„ุชุนุจูŠุฑ ุงู„ุฃูˆู„ ุŒ $c = $a + $a++;ุจุนุฏ ุงู„ุฒูŠุงุฏุฉ "++" ู„ู‡ุง ุงู„ุฃุณุจู‚ูŠุฉ ุนู„ู‰ "+" ุŒ ู„ุฐุง ูุฅู† $ a ++ ู…ุฌู…ูˆุนุฉ ู…ู†ูุตู„ุฉ:



$c = $a + ($a++);


$c = $a + $a + $a++; - "++" , "+":



$c = $a + $a + ($a++);


"+" - , "+" :



$c = ($a + $a) + ($a++);


: , .



? . , , . , , ($a + $a), ($a++) .



PHP . PHP , โ€” . , - .



CV



-, , PHP , , ( PHP).



(compiled variables, CV), PHP 5.1. (, $a, $a->b $a['b']) . โ€” , PHP , Zend VM ( Zend). 2 .



, .

$a + $a + $a++:



// code:
$a = 1;
$c = ($a + $a) + ($a++);


// opcodes:
         ASSIGN   $a, 1
$tmp_1 = ADD      $a, $a
$tmp_2 = POST_INC $a
$tmp_3 = ADD      $tmp_1, $tmp_2
         ASSIGN   $c, $tmp_3


:



  • $a = 1,
  • โ€” $a + $a $tmp_1,
  • - $a $tmp_2,
  • , , $c.


( $a + $a, $a++), , , .



$a + $a++:



// code:
$a = 1;
$c = $a + ($a++);


// opcodes:
         ASSIGN   $a, 1
$tmp_1 = POST_INC $a
$tmp_2 = ADD      $a, $tmp_1
         ASSIGN   $c, $tmp_2


, POST_INC ($a++) , $a ADD. ? . . CV .



CV



: , CV - @. PHP 5.x, PHP 7 . , PHP 5 , , - - CV CV.



PHP 5.x

() , CV , , @.



. $a + $a++, , @:



<?php

$a = 1;
@ $c = $a + $a++;
var_dump($c); // int(2)


, , 3 2. , :



         ASSIGN        $a, 1
$tmp_1 = BEGIN_SILENCE
$var_3 = FETCH_R       'a'
$tmp_4 = POST_INC      $a
$tmp_5 = ADD           $var_3, $tmp_4
$var_2 = FETCH_W       'c'
         ASSIGN        $var_2, $tmp_5
         END_SILENCE   $tmp_1


, . -, BEGIN_SILENCE END_SILENCE . . -, $a $b FETCH_R ( ) FETCH_W ( ) .



, $a , .






CV , , .



. $a + $a++, :



<?php

$a = [1];
$c = $a[0] + $a[0]++;
var_dump($c); // int(2)


, , 3 2. , :



         ASSIGN        $a, [1]
$tmp_3 = FETCH_DIM_R   'a', 0
$var_4 = FETCH_DIM_RW  'a', 0
$tmp_5 = POST_INC      $var_4
$tmp_6 = ADD           $tmp_3, $tmp_5
         ASSIGN        $c, $tmp_6


, FETCH_DIM_R ( ) FETCH_DIM_RW ( /) .



, , , .



, . 3v4l.org.





- , :



  1. . .
  2. ูŠู‚ูˆู… ุงู„ู…ุดุบู„ @ุจุชุนุทูŠู„ ุชุญุณูŠู† ุงู„ุณูŠุฑุฉ ุงู„ุฐุงุชูŠุฉ ูˆูŠู‚ู„ู„ ู…ู† ุงู„ุฃุฏุงุก ู†ุชูŠุฌุฉ ู„ุฐู„ูƒ. ุงู„ู…ุดุบู„ ุŒ ู…ู† @ุญูŠุซ ุงู„ู…ุจุฏุฃ ุŒ ุณูŠุก ู„ู„ุฃุฏุงุก.


~ ู†ูŠูƒูŠูƒ



ู…ู„ุงุญุธุฉ ุงู„ู…ุชุฑุฌู…: ูƒู…ุง ู‡ูˆ ู…ุฐูƒูˆุฑ ุฃุนู„ุงู‡ ุŒ ูุฅู†ู‡ @ูŠุนุทู„ ุชุญุณูŠู†ุงุช ุงู„ุณูŠุฑุฉ ุงู„ุฐุงุชูŠุฉ ูู‚ุท ููŠ 5.x ุŒ ููŠ PHP 7 ูŠุชู… ุฅุฌุฑุงุก ุชุญุณูŠู†ุงุช ุงู„ุณูŠุฑุฉ ุงู„ุฐุงุชูŠุฉ ุญุชู‰ ุฅุฐุง ุชู… ุงุณุชุฎุฏุงู… ุนุงู…ู„ ู‚ู…ุน ุงู„ุฎุทุฃ (ูˆู„ูƒู† ุฑุจู…ุง ู„ุง ูŠุญุฏุซ ู‡ุฐุง ููŠ ุฌู…ูŠุน ุงู„ุญุงู„ุงุช). ู„ุฏู‰ Nikita Popov ู…ู†ุดูˆุฑ ู…ุฏูˆู†ุฉ ู…ุซูŠุฑ ู„ู„ุงู‡ุชู…ุงู… ุŒ Static Optimization ููŠ PHP 7 ุŒ ููŠ ุญุงู„ุฉ ุฑุบุจุฉ ุดุฎุต ู…ุง ููŠ ุงู„ุชุนู…ู‚ ููŠ ู…ูˆุถูˆุน ุงู„ุชุญุณูŠู†.




All Articles