Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Объясните пожалуста оператор РНР

Ответить
Настройки темы
Объясните пожалуста оператор РНР

Ветеран


Сообщения: 1630
Благодарности: 220

Профиль | Отправить PM | Цитировать


Не могу понять очень распространенную фразу в PHP, т.к. в учебниках она разбирается по частям, а не вместе:

1)$sql="SELECT * FROM table WHERE id_s='$last' ORDER BY id";
2)$result=@mysql_query($sql);

3)if(@mysql_num_rows($result)>0)
{
4)while($row=@mysql_fetch_array($result))
{
операторы
}


В строках 1-2 вроде понятно: в переменную $result запихиваются все строки из таблицы, имеющие в колонке id_s определенное значение $last и эти строки отсортированы по возрастанию значения в колонке id

3) условный оператор тоже понятен: если в $result вообще отобрались какие-то строки(хотя бы одна >0), то условие и все что в него вложено выполняется.

Но что за странное условие цикла 4), не пойму
mysql_fetch_array судя по описанию и по названию $row должна строки таблицы из $result запихивать в элементы массива с индексами-названиями
т.е получается что какая-то неопределенная переменная $row сравнивается со строкой из таблицы $result. Естественно они не будут равны и цикл не должен выполняться, но в программе предполагается, что он вдруг выполняется, будто под while не логическая операция сравнения, а будто бы оператор присваивания переменной (элементу массива?) $row значения строки из $result.
Объясните пожалуйста, кто знает, что это за оператор while, может где есть нормальные примеры, а не просто теория.

Отправлено: 20:30, 24-04-2013

 

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


В строке 4 функция mysql_fetch_array() одну строку из запроса разбивает в массив и присваивает его в $row. Затем while проверяет, если $row - не false, то выполняются операторы. $row == false, если, например, закончились строки на перебор.

Внутри while операторы выполняются до тех пор, пока условие в скобках true.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:03, 24-04-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Разве там не присвоение?
PHP: Оператор присваивания - Manual
PHP: while - Manual

Update: припоздал .

Отправлено: 21:11, 24-04-2013 | #3


Ветеран


Сообщения: 1630
Благодарности: 220

Профиль | Отправить PM | Цитировать


Цитата Coutty:
пока условие в скобках true. »


Но в скобках-то не условие, а оператор присваивания, а в некоторых мануалах пишут, что должно быть условие.
Условие выглядит ведь $row==чему-то, т.е. 2 знака =, а не один.

Iska привел ссылку, где в while должно стоять expr-"выражение", а что такое "выражение" не пояснено.

Еще можно понять пример где while($a = each($two)), но там тоже одно = , и по крайней мере функция each означает обход "каждого".

Откуда можно понять, что выражение $row=столбцам строки - это TRUE,
а выражение $row=пусто(кончились строки) - это FALSE? В описании mysql_fetch_array это не указано.
Ведь $row после выполнения while должно быть, наверно, равно значению последней полученной строки, а не FALSE?
(вернее $row[0]=первый столбец последней строки, $row[1]=второй столбец последней строки,...??)

Что означает значок "@" перед функцией-оператором? В описании функций этого значка нет. Может, дело в нем?

Последний раз редактировалось alef2474, 24-04-2013 в 23:23.


Отправлено: 23:18, 24-04-2013 | #4


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата alef2474:
Но в скобках-то не условие, а оператор присваивания, а в некоторых мануалах пишут, что должно быть условие.
Условие выглядит ведь $row==чему-то, т.е. 2 знака =, а не один. »
alef2474, цитирую именно по ссылке PHP: Оператор присваивания - Manual:
Цитата:
Базовый оператор присваивания обозначается как "=". На первый взгляд может показаться, что это оператор "равно". На самом деле это не так. В действительности, оператор присваивания означает, что левый операнд получает значение правого выражения, (т.е. устанавливается значением).

Результатом выполнения оператора присваивания является само присвоенное значение. Таким образом, результат выполнения "$a = 3" будет равен 3. Это позволяет делать трюки наподобие:
PHP код: Выделить весь код

<?php
$a 
= ($b 4) + 5// $a теперь равно 9, а $b было присвоено 4.
?>
Понимаете? Условием для цикла while является результат выражения в скобках. Пока этот результат, результат присваивания переменной $row возвращаемого функцией значения, будет отличен от false — цикл будет выполняться.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:14, 25-04-2013 | #5


Ветеран


Сообщения: 1630
Благодарности: 220

Профиль | Отправить PM | Цитировать


Цитата Iska:
Базовый оператор присваивания обозначается как "=". На первый взгляд может показаться, что это оператор "равно". На самом деле это не так. В действительности, оператор присваивания означает, что левый операнд получает значение правого выражения, (т.е. устанавливается значением).
Результатом выполнения оператора присваивания является само присвоенное значение. Таким образом, результат выполнения "$a = 3" будет равен 3. Это позволяет делать трюки наподобие: »




Спасибо, вчитался в это сумбурное объяснение и понял, особенно благодаря примеру.

Имхо, объяснить надо было по-другому:

Выражение присваивания, кроме выполнения собственно операции присваивания значения правого операнда левому операнду, может выступать и целиком как значение только правого операнда для различных операций.
Т.е. выражение $a=3 может выступать как просто 3, а выражение $b=false как просто false.

Последний раз редактировалось alef2474, 26-04-2013 в 14:39.


Отправлено: 14:28, 26-04-2013 | #6



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Объясните пожалуста оператор РНР

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - РНР+ЯваСкрипт xNiSSaNx Программирование и базы данных 0 10-02-2012 11:38
Cессии в РНР pauluss Вебмастеру 1 11-11-2003 13:31
РНР ЧАТ CAHbE Вебмастеру 2 28-08-2003 21:50
Как пересабрать РНР? Hrun Программное обеспечение Linux и FreeBSD 6 14-07-2003 20:43




 
Переход