Stasroot1 писал(а): ↑19.04.2012 08:40
По поводу конкатенации: если ' заменить на " то как рас стилевые элементы в строке получаются коментами так как там встречается знак #...
1. код "#" комментарием НЕ считается, т.к. # тут не просто так, а в кавычках.
2. эти # в стилях всё равно исчезнут, ибо вы их вынесете в отдельный файл.
3. _хороший_ текстовый редактор сам определит, что к чему. Например VIM код
в контексте CSS считает непонятно чем, в отличие от
Этот код в контексте CSS VIM считает валидным числом.
(видите разницу? просто в первом коде "А" русская.)
Stasroot1 писал(а): ↑19.04.2012 08:40
Конкатенацию тоже постараюсь убрать по максимуму.
конкатенация приводит к появлению трудноуловимых и непонятных ошибок.
например вот такой пример:
на первый взгляд - ничего особенного, ну подумаешь, 2+2=4. Очевидно же!
Однако, если обратится к
таблице приоритетов, мы узнаём, что приоритет операции "точка" равен приоритету сложения, а это означает, что данный код ВООБЩЕ НЕИЗВЕСТНО КАК будет работать. У меня например этот код даёт
просто 4, а 2+2= проглатывает, и оно не выводится вовсе. Видимо потому, что php преобразует "2+2=" к эквивалентному ЧИСЛУ ноль, а потом считает выражение 02+2, получает 4, и добавляет к этому "<br />\n". Однако у вас может получится совсем иной результат. Мало того, в реальной жизни результат работы может быть разным даже при одинаковых входных данных!
Решение очевидно:
вот тут всё просто и однозначно.
Вы наверное подумали, что просто не надо мешать сложение с точкой? Если-бы... Проблема в том, что == тоже ОПЕРАТОР, и его тоже нельзя просто так взять, и с чем-то смешать. Точнее можно, вот только получится почти на 100% совсем не то, что вы ожидаете. Просто "равно" (=) тоже оператор, а вовсе не конструкция языка, этот факт очевидно весьма радует уже не первое поколение быдлокодеров, которых так много среди php-программеров. Особенно радует то, что в отличие от C/C++, для php существуют ещё и _исключения_ из правил, вроде
Замечание:
Несмотря на то, что оператор = имеет низший приоритет, чем большинство остальных операторов, PHP все равно позволяет использовать следующую конструкцию: if (!$a = foo()), которая присваивает переменной $a результат выполнения функции foo().
Если честно - лично я об этом впервые слышу
Stasroot1 писал(а): ↑18.04.2012 14:29
Т.е. эта функция циклом прочитала все указатели из выборки БД пока не получила пустое значение? А соответственно как получила так сразу FALSE и как следствие остановка цикла, так? И значение получается после обработки циклом пустое?
1. сначала СУБД создаёт специальную область данных в памяти, в которой хранятся все выбранные строчки.
2. потом СУБД создаёт указатель, который указывает на первую строчку в области памяти из (1)
3. функция mysql_fetch_...() возвращает php-массив, в котором лежит указываемя указателем (2) строчка из (1).
4. И перемещает указатель на след. строку, если она есть. Иначе указатель (2) перемещается "в никуда", и след. функция mysql_fetch_...() вернёт FALSE.
Результат работы функции (3) записывается в переменную $row_tid.
После чего эта переменная
преобразуется в TRUE/FALSE. Ну если получается FALSE от функции, то естественно получается FALSE и после преобразования. В противном случае получается от функции массив, и если этот массив не пустой, получается TRUE, а если массив пустой, получается FALSE, и цикл останавливается, хотя и не должен. Последний случай в данном конкретном случае невозможен, потому-то у нас всё работает. Правда, прочитать область памяти (1) можно только один раз...
PS: сложновато? Угу. php - это один из самых сложных, и запутанных языков программирования.
