ู ูุงุญุธุฉ ุงูู ุชุฑุฌู . ูุฏู ููููุชุง ุจูุจูู ููุง ูุฒุงู ููุฏู ู ุณุงูู ุฉ ูุจูุฑุฉ ูู ุชุทููุฑ ูุบุฉ 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 ุ ูู ุญุงูุฉ ุฑุบุจุฉ ุดุฎุต ู
ุง ูู ุงูุชุนู
ู ูู ู
ูุถูุน ุงูุชุญุณูู.