Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Что тут происходит
Форумы портала PHP.SU » » Вопросы новичков » Что тут происходит

Страниц (1): [1]
 

1. nordghost - 03 Апреля, 2012 - 19:58:32 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $a=10;
  3. $a+=++$a+$a+$a++;
  4. echo $a;
  5.  


Не могу понять как оно считает это выражение
2. Bio man - 03 Апреля, 2012 - 20:25:50 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $a+= // 33 + 12 = 45 "а" уже 12. операция += выполниться последней так как имеет самый низкий приоритет
  2. ++$a // 11 так как префиксный инкремент, "а" щас 11
  3. + $a + // 11 + 11 = 22 тут все понятно
  4. $a++; // 22 + 11 = 33 "а" по прежнему 11 так как инкремент постфиксный
  5.         //и "а" станет 12 только в следущей операции
  6.  
3. OrmaJever - 03 Апреля, 2012 - 20:30:14 - перейти к сообщению

так понятнее?
4. nordghost - 03 Апреля, 2012 - 20:49:34 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP  
  3.         $a=10;
  4.     $a +=++$a;
  5.         echo $a;
  6.         ?>
  7.  


К сожалению нет, не пойму почему если пигу вот просто так то результатом получаю 22 хотя должен по идее получить 21...
5. Bio man - 03 Апреля, 2012 - 20:58:04 - перейти к сообщению
++$a сразу же пребавляет к $a еденицу. Аналогичная запись
тока длиннее.
6. Саныч - 03 Апреля, 2012 - 20:58:53 - перейти к сообщению
nordghost пишет:
по идее получить 21
Это только по идее. На самом же деле действительно будет 22.
Ваш код тоже самое, что и:
7. OrmaJever - 03 Апреля, 2012 - 21:40:30 - перейти к сообщению
nordghost пишет:
К сожалению нет, не пойму почему если пигу вот просто так то результатом получаю 22 хотя должен по идее получить 21...

Вначале обрабатывается правая часть выражения затем левая. В правой части $a увеличивается на 1 и затем в левой части прибавляется к $a, но когда правая часть прибавляется к левой $a уже не 10 а 11, потому что мы его уже изменили.

 

Powered by ExBB FM 1.0 RC1