Операторы сравнения и логические(+)

berkut

Новичок
Операторы сравнения и логические(+)

Есть csv файл, на 15-ой строке в первой ячейке строка "Спецификация", наткнулся на такую непонятность:
PHP:
while (list($first_field) = fgetcsv($hdl, 2048, ';') && $first_field != 'Спецификация');
Эта конструкция проходит по всему файлу и не вылетает после нахождения "Спецификация"
Если взять в скобки
PHP:
while ((list($first_field) = fgetcsv($hdl, 2048, ';')) && $first_field != 'Спецификация');
Эта конструкция вылетает на строке 'Спецификация' как и ожидается.
Но почему первая конструкция не вылетает на следующей строке после "спецификация"? Про Operator Precedence читал, по этому, 1-ая конструкция должна вылететь на следующей строке, после "Спецификация"
 

ksnk

прохожий
Надо бы еще почитать, потому что в первом случае сначала выполняется !=, затем && , а затем =, как и описано в документации :)
 

berkut

Новичок
относительно первого варианта кода:
как только доходим до строки "спецификация":
в $first_field - значение из предыдущей строки(допустим "тест"), ("тест" != "спецификация") === true, далее,
(fgetcsv($hdl, 2048, ';') && true) === true, (fgetcsv() возвращает массив, 1-й эл-т которого "спецификация")
далее:
list($first_field) = fgetcsv($hdl, 2048, ';') и теперь в $first_field лежит "спецификация", т.е. на следующей итерации цикл должен закончиться

-~{}~ 10.09.05 19:13:

А, ёлки, это получается, что в list ($first_field) идёт результат всего выражения, а не fgetcsv(), т.е. true
list ($first_field) = true
Так что-ли?

-~{}~ 10.09.05 19:17:

слов нет, одни эмоции,
 
Сверху