ู ูุงุญุธุฉ ุงูู ุชุฑุฌู . ูุฏู ููููุชุง ุจูุจูู ููุง ูุฒุงู ููุฏู ู ุณุงูู ุฉ ูุจูุฑุฉ ูู ุชุทููุฑ ูุบุฉ 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.
() , 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.
- , :
- . .
- ูููู
ุงูู
ุดุบู
@ุจุชุนุทูู ุชุญุณูู ุงูุณูุฑุฉ ุงูุฐุงุชูุฉ ููููู ู ู ุงูุฃุฏุงุก ูุชูุฌุฉ ูุฐูู. ุงูู ุดุบู ุ ู ู@ุญูุซ ุงูู ุจุฏุฃ ุ ุณูุก ููุฃุฏุงุก.
ู
ูุงุญุธุฉ ุงูู
ุชุฑุฌู
: ูู
ุง ูู ู
ุฐููุฑ ุฃุนูุงู ุ ูุฅูู @ูุนุทู ุชุญุณููุงุช ุงูุณูุฑุฉ ุงูุฐุงุชูุฉ ููุท ูู 5.x ุ ูู PHP 7 ูุชู
ุฅุฌุฑุงุก ุชุญุณููุงุช ุงูุณูุฑุฉ ุงูุฐุงุชูุฉ ุญุชู ุฅุฐุง ุชู
ุงุณุชุฎุฏุงู
ุนุงู
ู ูู
ุน ุงูุฎุทุฃ (ูููู ุฑุจู
ุง ูุง ูุญุฏุซ ูุฐุง ูู ุฌู
ูุน ุงูุญุงูุงุช). ูุฏู Nikita Popov ู
ูุดูุฑ ู
ุฏููุฉ ู
ุซูุฑ ููุงูุชู
ุงู
ุ Static Optimization ูู PHP 7 ุ ูู ุญุงูุฉ ุฑุบุจุฉ ุดุฎุต ู
ุง ูู ุงูุชุนู
ู ูู ู
ูุถูุน ุงูุชุญุณูู.