Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Особенности написания кода новичками
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
.
Особенности написания кода новичками
Собственно, пока есть вдохновение, я попишу еще.
Заранее прошу прощения за некоторый негативчик.
В данной заметке мы с вами будем рассматривать не сам синтаксис php,
или какие-либо логические конструкции.
Мы рассмотрим тут несколько примеров "ужасного PHP-кодирования".
Некоторые из примеров будут являться следствием и/или дополнением предыдущих.
Скажите, люди, почему вы пишете вот так?
Вы с головой дружите?
На форуме постоянно всплывают вопросы вида "Почему у меня не работает редирект?"
Больше всего убивает, когда человек вываливает кусок кхмм..., своего кода,
где обработка и вывод данных происходит прямо в цикле разбора выборки из базы.
Неужели вам самим удобно писать кучу одинаковых по смыслу строк кода?
На форуме всплывают темы вида "Почему у меня на денвере все работало, а на хостинге вываливаются какие-то Deprecated?"
Вы не знаете что означает это слово? Попросите перевести гугла.
-----------------
Теперь поехали разбираться.
Во первых - никакой редирект не возможен если вы уже вывели на страницу хотябы один символ, или даже пробел!.
Отсюда вытекает, что до какого-либо вывода, все нужные на странице данные, сперва необходимо получить и сохранить в переменные.
И только потом выводить.
Отсюда же вытекает, что прямо в цикле разбора выборки из базы возможна только обработка и сохранение результатов в массив.
Отсюда же вытекает, что для устранения копипасты нужно написать себе нормальную обертку для запросов к базе.
Вы не знаете ООП? А функциями умеете? Ну так в чем проблема?
Если параметр link_identifier опущен, используется последнее открытое соединение
Одной строкой, а не этими бешеными циклами!
Отсюда вытекает, что нельзя использовать циклы do { ... } while (); при выборке из базы.
Потому, что такой цикл выполняется как минимум один раз! Вне зависимости от того есть ли хоть какой-то результат.
Не поняли как правильно сделать все описанное? Вот так:
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
хе хе,
по поводу того что надо все получить и только потом выводить,
несмотря на современный век супер пупер компов с нифигасе возможностями, вопрос оптимизации никто не отменял, а из последнего опыта это очень остро стояло.
так вот, очень часто для повышения производительности проще а иногда и удобней делать расчет вместе с выводом
да, это позже сложнее исправлять, поэтому подобная оптимизация это последних штрих
ну а для тех кто любит "посвинячить" ob_start() и т.д.
с остальным согласен.
EuGen
Отправлено: 04 Февраля, 2013 - 15:52:12
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Хочется порекомендовать не использовать такие резкие цвета - с трудом читал фразы, написанные жирным красным шрифтом. Кроме того, многие вещи носят предписывающий:
DeepVarvar пишет:
никакой редирект не возможен если вы уже вывели на страницу хотябы один символ, или даже пробел!.
- а не поясняющий характер. Иными словами, написано - что делать, но не сказано - почему так нужно делать.
DeepVarvar пишет:
нельзя использовать циклы do { ... } while (); при выборке из базы.
Корректнее сказать, что цикл с постусловием выполняется хотя бы раз, соответственно его нельзя использовать вообще в любых конструкциях, где число итераций заранее неизвестно и может быть нулевым.
DeepVarvar пишет:
для устранения копипасты нужно написать себе нормальную обертку для запросов к базе.
Свой велосипед, право же - не всегда лучше общеизвестного. Да, оно, конечно, написано собственноручно, но у обкатанного все же круглые, а не квадратные, колеса, и едет он вперед, а не наискосок. Это образно. Смысл в том, что доносить идею об обертке - верно, но вот о том, чтобы её писать самостоятельно - я бы посомневался.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DeepVarvar
Отправлено: 04 Февраля, 2013 - 16:15:03
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
EuGen пишет:
красным шрифтом
А темно-красный слишком тёмен, и на ЖК практически не виден..
EuGen пишет:
написано - что делать, но не сказано - почему
Я и не задавался целью объяснять, т.к. думаю что те, кто поймет или примет на веру данные "заметки", рано или поздно зададут вопрос "почему", вот тогда они будут готовы узнать.
EuGen пишет:
Свой велосипед
Считать обкатанным способ копипасты циклов внутри хтмл-кода - это плохо.
Тут я хотел донести удобство получения результата запроса в одну строку.
Что писать лучше не самому - то совсем не будет двигаться вперед.
И года через 2 не научившись писать круглые колеса, впилит в серьезный проект свое чудо техники - и последствия будут очень бОльными.
Лучше пусть сейчас тренируются и ошибаются - сами.
И поэтому тоже я тут больше рекомендую, чем объясняю.
DlTA пишет:
проще а иногда и удобней делать расчет вместе с выводом
Есть отличная фраза (слышал в контексте сочинения музыки, но сюда оно тоже подходит)
Цитата:
Для того, чтобы иметь возможность нарушать правила, их нужно сперва все выучить.
Т.е. тут снова всплывает вопрос осознанности поступка.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DeepVarvar пишет:
Считать обкатанным способ копипасты циклов внутри хтмл-кода - это плохо.
Речь все же была об обертке. Хорошим подспорьем будет взять что-то готовое (из фреймворка, к примеру), чем писать свой вариант, который будет наверняка намного хуже. Это к тому же породит необходимость разобраться, хотя бы в начальном варианте, почему там сделано именно так, как сделано. Это к слову о том, что
DeepVarvar пишет:
рано или поздно зададут вопрос "почему", вот тогда они будут готовы узнать.
- и чем раньше, тем лучше. Слепое следование рекомендациям почти всегда приводит к непонимании проблематики, желание же узнать причины - порождает необходимость понять. Здесь я, правда, отталкиваюсь от того, что люди, которые пытаются программировать для веб - должны быть знакомы с основами. Собственно, Ваша статья и является доказательством обратного. Однако этот ход - снятие симптома, а не решение причины такой проблемы. Согласитесь, что если бы веб-программисты сначала изучали инструменты, с помощью которых им нужно работать, а не бездумно их применяли, таких вопросов бы не возникало.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DeepVarvar
Отправлено: 04 Февраля, 2013 - 16:33:01
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
EuGen пишет:
Согласитесь, что если бы веб-программисты сначала изучали инструменты, с помощью которых им нужно работать, а не бездумно из применяли, таких вопросов бы не возникало.
Именно, но к сожалению... Ну что-ж посмотрим, вдруг мой "аспирин" поможет кому-то с его "тяжелой болезнью".
DeepVarvar пишет:
Именно, но к сожалению..
Вот и мне всегда сознательно хотелось спуститься на более низкий уровень, для того, чтобы понять то, что происходит на этом уровне..
Например, очень в кратце вниз:
Браузер -> сервер -> интерпретатор -> ОС -> процессор -> ТТЛ -> транзистор -> реле -> физика пятого класса..
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Зона ответственности программиста закончится на шаге "интерпретатор", хорошего программиста - на шаге "ОС", архитектора - на шаге "процессор". Дальнейшее - пусть и имеет непосредственное отношение к программированию и компьютерному железу, но оно имеет ту же степень связи, как, например, квантовая физика и медицина (все мы - суть атомы, а, значит, кванты, мезоны и бозоны, однако же классному врачу это знать не обязательно для того, чтобы спасти жизнь человеку).
В Вашей схеме еще упущены такие вещи, как транспортный уровень (если быть детальным, то одного только перехода стрелкой здесь мало, в свою очередь этот уровень так же раскрывается на подуровни - начиная от протоколов уровня приложений к стеку TCP/IP и ниже до канального и физического уровней), а так же уровни фронтенд/бекенд серверов (как то - веб-сервер).
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DeepVarvar
Отправлено: 04 Февраля, 2013 - 17:03:00
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
EuGen пишет:
...уровень так же раскрывается на подуровни...
Да-да, именно поэтому "очень вкратце и одним вектором без ветвлений". А вот по поводу как глубоко вниз нужно уйти.. Я бы сказал что не нужно ниже (глубже), чем описано в книге Стивена Леви "Хакеры: Герои компьютерной революции".
По крайней мере, после прочтения можно будет блеснуть знанием истории развития компьютерной техники ))
Да и вообще, книжечка то - зачетная ))
Цитата:
IBM 704, стоимость которого составляла несколько миллионов долларов, занимал целую комнату, требовал постоянного внимания персонала, состоявшего из профессиональных операторов ЭВМ. Ему также требовалось специальное кондиционирование, чтобы раскаленные вакуумные лампы внутри этого сооружения не нагрелись до температур, уничтожающих данные. Когда кондиционирование выходило из строя, а это было достаточно частым явлением, то звучал громкий гонг, после чего из близлежащего офиса пулей неслись три инженера. С машины очень быстро снимались кожухи, так чтобы ее внутренности не успели расплавиться. Все эти люди отвечали за перфорацию карт, их подачу в считыватели, нажатие кнопок и щелканье переключателями на машине. Они представляли собой Высшую Касту Жрецов, а те, кто был достаточно привилегирован, чтобы представить свои данные перед ликом Высших Жрецов являлись их официальными помощниками. Сама процедура загрузки программ фактически была ритуальным обрядом.
Помощник:
О, компьютер, окажи милость принять мой дар, состоящий из информации, так чтобы ты смог выполнить мою программу и возможно выдать мне результат вычислений.
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
DlTA пишет:
хе хе,
по поводу того что надо все получить и только потом выводить,
несмотря на современный век супер пупер компов с нифигасе возможностями, вопрос оптимизации никто не отменял, а из последнего опыта это очень остро стояло.
так вот, очень часто для повышения производительности проще а иногда и удобней делать расчет вместе с выводом
да, это позже сложнее исправлять, поэтому подобная оптимизация это последних штрих
ну а для тех кто любит "посвинячить" ob_start() и т.д.
с остальным согласен.
Согласен. Вывод в цикле иногда ощутимо шустрее и если нет задачи писать для других, то вполне, на мой взгляд, оправдан.
DeepVarvar
Отправлено: 19 Февраля, 2013 - 19:55:31
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
MAXUS пишет:
Вывод в цикле иногда ощутимо шустрее
Что есть "ощутимо"? Можно увидеть в микросекундах?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.