![]() |
Объясните пожалуста оператор РНР
Не могу понять очень распространенную фразу в 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, может где есть нормальные примеры, а не просто теория. |
В строке 4 функция mysql_fetch_array() одну строку из запроса разбивает в массив и присваивает его в $row. Затем while проверяет, если $row - не false, то выполняются операторы. $row == false, если, например, закончились строки на перебор.
Внутри while операторы выполняются до тех пор, пока условие в скобках true. |
Разве там не присвоение?
PHP: Оператор присваивания - Manual PHP: while - Manual Update: припоздал ;). |
Цитата 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]=второй столбец последней строки,...??) Что означает значок "@" перед функцией-оператором? В описании функций этого значка нет. Может, дело в нем? |
Цитата:
Цитата:
|
Цитата Iska:
Базовый оператор присваивания обозначается как "=". На первый взгляд может показаться, что это оператор "равно". На самом деле это не так. В действительности, оператор присваивания означает, что левый операнд получает значение правого выражения, (т.е. устанавливается значением). Результатом выполнения оператора присваивания является само присвоенное значение. Таким образом, результат выполнения "$a = 3" будет равен 3. Это позволяет делать трюки наподобие: » Спасибо, вчитался в это сумбурное объяснение и понял, особенно благодаря примеру. Имхо, объяснить надо было по-другому: Выражение присваивания, кроме выполнения собственно операции присваивания значения правого операнда левому операнду, может выступать и целиком как значение только правого операнда для различных операций. Т.е. выражение $a=3 может выступать как просто 3, а выражение $b=false как просто false. |
Время: 15:43. |
Время: 15:43.
© OSzone.net 2001-