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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Операторы инкремента и декремента

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Oleh
Отправлено: 17 Августа, 2011 - 22:58:03
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Прохожу в книге тему "операторы инкремента и декремента" и ни хрена не могу понять.

Мне понятно, что инкремент – это увеличение (от слова increase), а декремент – это уменьшение (от слова decrease). Но вот дальше…
Вот тут http://php.su/learnphp/operators/?id пишется, что существуют префиксные и постфиксные инкременты и декременты.

Префиксный инкремент (++$a) увеличивает $a на единицу и возвращает значение $a.
Постфиксный инкремент ($a++) возвращает значение $a, а затем увеличивает $a на единицу.
Префиксный декремент (--$a) уменьшает $a на единицу и возвращает значение $a.
Постфиксный декремент ($a--) возвращает значение $a, а затем уменьшает $a на единицу.

Первое, что не понятно, - в чём разница между префиксным и постфиксным:
- сначала увеличением $a на единицу, а затем возвращением значение $a;
и
- сначала возвращением значения $a, а затем увеличения $a на единицу ?

Это выглядит просто как перемена мест слагаемых. Результат то не меняется.
Увеличение на единицу – это понятно. Непонятно куда возвращается значение $a ? Чем, оператором ?

И дальше приводится пример:

$a=10;
$b=$a++;
echo "a=$a, b=$b" // Выводит a=11, b=10

Почему a=11, а b=10 ? Ведь $а изначально равна 10 ($a=10;).
Затем используется постфиксный инкремент ($a++), который возвращает значение $a (опять таки, непонятно кому и зачем ?), а затем увеличивает $a на единицу. Т.е. получается, что постфиксный инкремент в данном случае возвращает переменной "а" ($a) её же значение – "10", а затем увеличивает это значение на единицу. Далее значение "11" оператором присваивания присваивается переменной "b" ($b). Получается, что значение переменной "b" будет равно "11". Но в приведённом выше примере всё наоборот.
Я не понимаю логику этих операторов. Кто-нибудь может доступно объяснить ?

Далее.
В книге, в которой я смотрю эту тему http://depositfiles[dot]od[dot]ua/php/03.php#d приводится следующий пример:

$i=15; // Присвоить $i целое число 15
$a=$i--; // СНАЧАЛА присвоить $a значение $i, а ЗАТЕМ уменьшить $a
$b=++$i; //СНАЧАЛА увеличить $i, а ЗАТЕМ присвоить увеличенное значение $i переменной $b

Вопрос следующий.
Учитывая, что и инкремент с декрементом, и оператор присваивания имеют правостороннюю ассоциативность, то почему в строке ($a=$i--;) сначала выполняется оператор присваивания, а потом постфиксный декремент ?
Ведь правосторонняя ассоциативность означает, что последовательность выполнения операторов будет происходить справа налево, т.е. получается, что сначала должен выполниться постфиксный декремент, а потом оператор присваивания.

Кроме того. Прописал я этот код:
$i=15;
print $i."<br>";
$a=$i--;
print $a."<p>";

По идее на экран должно вывести число 15, а под ним число 14, поскольку переменной $a присвоилось значение переменной $i (т.е. число 15), а затем это значение уменьшилось на единицу. Но у меня выводятся два числа 15 (одно под другим). Почему значение $a не уменьшается на единицу ?
 
 Top
LIME
Отправлено: 18 Августа, 2011 - 00:06:13
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Oleh пишет:
Т.е. получается, что постфиксный инкремент в данном случае возвращает переменной "а" ($a) её же значение – "10", а затем увеличивает это значение на единицу. Далее значение "11" оператором присваивания присваивается переменной "b" ($b). Получается, что значение переменной "b" будет равно "11".
присваивает значение только 1 раз....тоесть присваивает 10 потом увеличивает и все...на этом все действия закончены....при последующих обращениях к $a будет возвращено уже 11
 
 Top
Oleh
Отправлено: 18 Августа, 2011 - 01:38:09
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




LIME пишет:
присваивает значение только 1 раз....тоесть присваивает 10 потом увеличивает и все...на этом все действия закончены....при последующих обращениях к $a будет возвращено уже 11

Это всё ты говоришь о переменной $a ?

$a=10; // это присвоение значения 10 переменной
$a++; // это увеличение значения переменной $a на единицу

А почему переменная $b равняется 10, если "$a++" - это уже 11 и эти 11 присваиваются переменной $b ?

$b=$a++;
 
 Top
LIME
Отправлено: 18 Августа, 2011 - 01:45:27
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Oleh пишет:
сначала возвращением значения $a, а затем увеличения $a на единицу ?
что непонятного?
(Добавление)
бросай это дело
программировать это не твое
(Добавление)
сначала присваивается а потом увеличивается при постинкременте
и после увеличения уже не присваивается
русским по белому написано!!!
(Добавление)
попробую как ребенку объяснить )))
есть 2 коробочки
1 пустая в другой карандаши
смотрим сколько карандашей в второй коробочке и кладем в первую столько же
потом в вторую кладем еще 1 карандаш

(Отредактировано автором: 18 Августа, 2011 - 01:46:20)

 
 Top
Oleh
Отправлено: 18 Августа, 2011 - 02:06:40
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




LIME пишет:
что непонятного?
(Добавление)
бросай это дело
программировать это не твое
(Добавление)
сначала присваивается а потом увеличивается при постинкременте
и после увеличения уже не присваивается
русским по белому написано!!!

Ты объяснять нормально научись !
Сначала прочитай мой вопрос полностью, а уже потом пытайся что-то промычать.
Я в своём вопросе всё чётко изложил, что мне непонятно. А ты отвечаешь какими-то обрывками, ещё больше людей путаешь.
Чего ты вообще на этот форум зашёл и эфир тут засоряешь ? Советовать всем, кто не понимает твои "объяснения", что программирование - это не их дело ? Так мы и без тебя, такого "грамотея" разберёмся, что нам делать.
Не умеешь объяснять - не объясняй ! Тебя лично никто об этом не просил.
 
 Top
LIME
Отправлено: 18 Августа, 2011 - 02:10:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




я выше добавил специально для недалеких хамов объяснение ))
 
 Top
Мелкий Супермодератор
Отправлено: 18 Августа, 2011 - 09:13:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Oleh пишет:
Увеличение на единицу – это понятно. Непонятно куда возвращается значение $a ? Чем, оператором ?

считайте, что это - функция:
PHP:
скопировать код в буфер обмена
  1. /**
  2.  * постфиксный инкремент
  3.  */
  4. function postfix_incr(&$arg) {
  5. $t = $arg;
  6. $arg = $arg+1;
  7. return $t;
  8. }
  9. /**
  10.  * префиксный инкремент
  11.  */
  12. function prefix_incr(&$arg) {
  13. $arg = $arg+1;
  14. return $arg;
  15. }

Внимание на ретурны.

И не стоит хамить.

(Отредактировано автором: 18 Августа, 2011 - 09:13:32)



-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 18 Августа, 2011 - 13:09:40
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)





Мелкий вы обеспечили автору взрыв черепной коропки))
у парня нет терпения а это главное в изучении чего-либо
 
 Top
illy
Отправлено: 18 Августа, 2011 - 13:26:51
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $i=15;
  3. // присвоить а значение i, заодно уменьшить i на единицу
  4. $a=$i--;
  5. // тоже самое что $a=$i; $i--;
  6. echo '$a='.$a.' $i='.$i.'<br>';
  7. // уменьшить i на единицу и присвоить его а
  8. $a=--$i;
  9. // тоже самое что $i-=1; $a=$i;
  10. echo '$a='.$a.' $i='.$i.'<br>';
  11. ?>
  12.  

З.Ы. никогда не пользовался --i ++i Ха-ха вообще до этого момента не знал что такое есть

(Отредактировано автором: 18 Августа, 2011 - 13:30:36)



-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Oleh
Отправлено: 18 Августа, 2011 - 14:42:51
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




LIME пишет:
Oleh пишет:
сначала возвращением значения $a, а затем увеличения $a на единицу ?
что непонятного?
(Добавление)
бросай это дело
программировать это не твое
(Добавление)
сначала присваивается а потом увеличивается при постинкременте
и после увеличения уже не присваивается
русским по белому написано!!!
(Добавление)
попробую как ребенку объяснить )))
есть 2 коробочки
1 пустая в другой карандаши
смотрим сколько карандашей в второй коробочке и кладем в первую столько же
потом в вторую кладем еще 1 карандаш

Слушай, я здесь эте тему создал не для того чтобы с тобой перегавкиваться или реагировать на твои бессмысленные комменты. Мне реально непонятно зачем ты "мусоришь" в темах, создаваемых новичками. Может у тебя психолгическая проблема и ты пытаешься её решить своими советами типа "бросай программирование, т.к. я считаю, что это не твоё".
Вообще, если ты заметил, то я в созданной теме не спрашивал твого мнения, чем мне заниматься в жизни. Я с этим и сам разберусь.
Я задал конкретные вопросы в расчёте на то, что мне кто-нибудь напишет вразумительные ответы.
Я сам юрист, около полугода ходил к репетитору на программирование, т.к. учебники не мог самостоятельно осилить. Было много незнакомой терминологии, ну и вообще материал незнакомый. Два месяца проходил с репетитором HTML, следующие два месяца - JavaScript, следующие два месяца - PHP. Нужно ещё учитывать, что я не знал основ, без знания которых открывать учебники про HTML, JavaScript или PHP не было никаого смысла. Сейчас я сам более-менее могу разбираться в учебниках, но есть темы которые я не могу понять не потому, что я тупой, а потому, что в большинстве учебников материал изложен автором в стиле "для себя". Такое впечатление, что авторы книг не ставили цель изложить материал в своём учебнике таким образом, чтобы он был понятен людям, ранее не имевшим дело с программированием.
Вот и твои комменты по моей теме написаны в таком же стиле. Более того, твои ответы вообще не по теме. Я тебе уже сказал, прочитай полностью мою тему. Там конкретные вопросы, на которые можно дать нормальный ответ, а не писать про какие-то карандаши.
Единственное, чего ты добился, так это моей просьбы админу забанить тебя в теме "Вопросы новичков", т.к. непонятно зачем ты здесь свои посты оставляешь.
 
 Top
White
Отправлено: 18 Августа, 2011 - 14:52:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




Oleh если вы юрист, то лучше остальных знаете о свободе слова. тем более что никакой ненормативной лексики в отношении вас использовано не было. а то, что вы не хотите воспринимать действительность, а лишь воспринимаете желаемое за действительное +
Oleh пишет:
Я сам юрист, около полугода ходил к репетитору на программирование, т.к. учебники не мог самостоятельно осилить
наталкивает на мысль, какой из вас юрист.
Oleh пишет:
в большинстве учебников материал изложен автором в стиле "для себя".
возможно проблемма не в учебниках, а в том что у вас недостаточно терпения чтобы их читать.


-----
if(time()>1356048000) die();
 
 Top
EuGen Администратор
Отправлено: 18 Августа, 2011 - 14:54:09
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Мир, труд, май.
Тема закрыта!


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB