X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
> цикл for
Sardin
Sardin
Topic Starter сообщение 17.4.2011, 3:20; Ответить: Sardin
Сообщение #1


[PHP]<?php
for ($x=0; $x++<10;) echo $x;
?>[/PHP]
Почему в условий цикла выполняется сначала "<" а потом только "++", разве это не протеворечит правилу "Приоритет выполнения операторов"
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 17.4.2011, 6:34; Ответить: alexdrob
Сообщение #2


(Sardin @ 17.4.2011, 06:20) *
разве это не протеворечит правилу

не противоречит. Разницу между $a++ и ++$a почитайте и всё станет ясно.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 17.4.2011, 9:01; Ответить: Apay
Сообщение #3


почитайте про различия в ++$x и $x++, в двух словах - первое делает инкремент до использования значения переменной, второе - после.

added:
опередили :rolleyes:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Sardin
Sardin
Topic Starter сообщение 18.4.2011, 0:05; Ответить: Sardin
Сообщение #4


Тут не чего не сказано. Значит не имеет значения ++$x или $x++ .
http://docs.php.net/manual/ru/language.ope....precedence.php
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 18.4.2011, 0:20; Ответить: alexdrob
Сообщение #5


http://docs.php.net/manual/ru/language.ope...s.increment.php

++$a Префиксный инкремент Увеличивает $a на единицу и возвращает значение $a.
$a++ Постфиксный инкремент Возвращает значение $a, а затем увеличивает $a на единицу


А разьве там не написано, что $a++ сначала возвращает значение, потом оно обрабатывается, то есть в данном случае сравнивается, а потом только увеличивает.
А ++$a вначале увеличивает, а потом возвращает и проверка выполняется уже после увеличения.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MetSerp
MetSerp
сообщение 18.4.2011, 0:25; Ответить: MetSerp
Сообщение #6


(Sardin @ 18.4.2011, 03:05) *
Значит не имеет значения ++$x или $x++ .

просто префиксный инкремент/декремент сначала выполняется и потом возвращает значение а постфиксный инкремент/декремент сначала возвращает свое значение для работы и только потом увеличивает себя
[PHP]$a = 0;
$b = 1;
echo $a++ + --$b;[/PHP]
Выведет 0
[PHP]$a = 0;
$b = 1;
echo $a++ + $b--;[/PHP]
выведет 1
в вашем случае преоритет тоже не нарушен
он СНАЧАЛА прибавляет 1 к 0(потом 1 к 1 итп) и сравнивает с десяткой
и мы получаем 12345678910
[PHP]for ($x=0; ++$x<10;) echo $x;[/PHP]
а тут он сначала прибавляет 1 потом возвращает текущее значение х и уже с ним сравнивает 10 потому тут будет 123456789
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Sardin
Sardin
Topic Starter сообщение 18.4.2011, 8:41; Ответить: Sardin
Сообщение #7


MetSerp, сейчас понятно. В выражений x++<10, "x" прибавляет новое число , затем сравнивает ("<"), но со старым выражением "x" и выводит уже новое( с прибавленным числом).
Итог: Правило "Приоритет выполнения операторов" не нарушается

(alexdrob @ 18.4.2011, 03:20) *
А разьве там не написано, что $a++ сначала возвращает значение, потом оно обрабатывается, то есть в данном случае сравнивается, а потом только увеличивает.


Нет, alexdrob, оно не обрабатывается перед тем как увеличится, а увеличивается и потом только обрабатывается, но со старым значением
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 18.4.2011, 9:27; Ответить: Apay
Сообщение #8


(Sardin @ 18.4.2011, 11:41) *
Нет, alexdrob, оно не обрабатывается перед тем как увеличится, а увеличивается и потом только обрабатывается, но со старым значением
это называется что в лоб что по лбу (одно и то же), а как физически делается - зависит только от реализации компилятора/интерпретатора.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Sardin
Sardin
Topic Starter сообщение 18.4.2011, 9:47; Ответить: Sardin
Сообщение #9


(Apay @ 18.4.2011, 12:27) *
это называется что в лоб что по лбу (одно и то же), а как физически делается - зависит только от реализации компилятора/интерпретатора.

АХАХАХАХАХХАХАХАХАХАХ. Нет, это не одно и тоже. Надо понимать так, как создатели придумали, а не петь под свою дудку.
MetSerp, вставьте своё мнение.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 18.4.2011, 10:01; Ответить: Apay
Сообщение #10


если до конца придираться к словам, то у вас неправильно, в документации написанно:
$a++ Постфиксный инкремент Возвращает значение $a, а затем увеличивает $a на единицу.
то есть сначала используется значение переменной, и только после этого происходит инкремент, а вы написали неверно
(Sardin @ 18.4.2011, 11:41) *
увеличивается и потом только обрабатывается, но со старым значением

прочитайте внимательно, сначала возвращает значение, и только затем увеличивает
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Качественное пакетное размещение статей на 500+ СДЛ сайтов с ЯК, Тиц! Полный цикл работ!
82 Antonium 24471 30.1.2014, 13:53
автор: a_seo
Открытая тема (нет новых ответов) Цикл "for" и простые способы для многослойных выпадающих меню и слайдшоу
0 hhpd 5177 17.2.2013, 5:47
автор: -hhpd-


 



RSS Текстовая версия Сейчас: 25.4.2024, 9:25
Дизайн