![]() ![]() | |
taxpert.ru — Блог — PHP+HTML: маленькие хитрости 1PHP+HTML: маленькие хитрости 126.06.2012 Секция: Сайтостроение и WEB-разработка Просмотров: 8992 Комментарии (5)добавить комментарий 26.06.2012 Как и во всяком ремесле, в PHP существует масса всевозможных хитростей, ощутимо помогающих облегчить жизнь простого программиста. Вот некоторые из этих хитростей. Прим.: не забудьте почитать также «Шпаргалка по трюкам в PHP» Трюк 1: передача массивов из формы. Из HTML-формы можно передавать не только значения (переменные), но и массивы. Это делается очень просто: <input name="nazvanie[gorod]" value="newyork"> При отправке данных из формы с таким полем PHP-скрипт получит значение из поля input не как переменную, а как элемент массива nazvanie с ключом «gorod» и значением «newyork». При автоматическом формировании формы (скажем, при генерации прайс-листа со множеством наименований) — трюк поистине незаменимый, да и обработку массива скриптом куда проще организовать, чем анализ кучи переменных с названиями вроде tovar1, tovar2 и т. д. Трюк 2: сокращённая форма записи условия в PHP. Конструкцию... [cod]echo "param=";~^~if($a==1)~^~{ echo "1"; }~^~else { echo "2"; }[/cod] ...гораздо проще (и короче) изложить в сокращённой форме: [cod]echo "param=".($a==1?"1":"2");[/cod] Трюк 3: анализ HTML-кнопок типа «submit». HTML-кнопка «submit», как известно, отправляет данные HTML-формы серверу (в нашем случае на обработку PHP-скрипту). А как быть, если в форме нужны несколько кнопок, предусматривающих разные варианты обработки данных? Столкнувшись с этой задачей, почему-то мало кто вспоминает, что у кнопок типа «submit» есть собственный атрибут «value». Нет, конечно, всем известно, что этот атрибут выводит надпись на кнопке, иного же значения ему, как правило, не придают. Между тем в случае наличия у кнопок типа «submit» атрибута «name» текст подписей на кнопках отправляется из формы на сервер наряду с прочими данными и может быть проанализирован скриптом, что и позволит произвести столько разных обработок данных по нажатию разных кнопок типа «submit», сколько душе заблагорассудится. Преимущество трюка в том, что никаких полей типа «hidden» в этом случае не требуется. Ещё эффективнее в этом плане использование тега <button>: он делает то же самое, что и submit, но в отличие от последнего, представляет собой полноценный закрывающийся контейнер и может содержать такие опции, как name и value (то есть передаёт при нажатии переменную с наименованием, указанным в name, и значением, указанным в value). Другими словами, <button> — это полноценный гибрид из <submit> и <input>. Можете себе представить, какие возможности он открывает при добавлении в форму. Трюк 4: несуществующие параметры функций PHP. Общеизвестно, что при обращении к функциям в PHP необходимо указывать ровно столько же переменных, сколько должна принимать функция: $hour=16;$minute=35;function(hour,$minute){...} Куда менее известно, что для переменных в заголовке функции можно указывать значения по умолчанию (для использования в случае отсутствия значений переменных или самих переменных при обращении извне), что позволит обращаться к функции с любым количеством переменных или вообще не указывать их: function today_is($hour=16,$minute=0) Трюк 5: предотвращение кэширования JS-скриптов и CSS-стилей. Сколько народу ежедневно ругается, изменив содержимое JS-скрипта или стилей CSS и обнаружив, что браузер прочно закешировал старую версию и ни в какую не желает показывать результаты работы новой. Особенно те, у кого в компании доступ в интернет осуществляется через прокси-сервер. Чего только не предпринимается в подобных случаях: в meta-раздел ставятся заголовки с истекшим сроком давности, meta-теги антикеширования и т. д. Между тем иногда достаточно поставить после упоминания соответствующего файла псевдопараметр в виде случайного числа, генерируемого коротеньким кусочком кода PHP: script.js?nocache='.rand(15,1500).' ...чтобы при открытии страницы всегда подгружалась исключительно свежая версия файла. Трюк 6: кавычки, апострофы и интепретация текста. К выбору контейнера для стринговых (текстовых) значений зачастую принято подходить несколько небрежно. А зря: многие забывают, что содержимое двойных текстовых кавычек (") интерпретатор PHP всегда анализирует на предмет наличия переменных, тогда как к содержимому контейнеров из одиночкых кавычек (апострофов) он абсолютно равнодушен, отображая их точно символ в символ без интерпретации. Поэтому тексты с переменными удобнее заключать в неразрывные двойные кавычки: $text="Здравствуйте, ${client}!"; Зато неудобочитаемый код с апострофами выполняется заметно быстрее, особенно в циклах: $text=Здравствуйте, .$client.!; Трюк 7: мгновенный вывод. Ещё один отличный способ ускорить выполнение сценария — вместо того, чтобы немедленно и каждый раз выводить всё попавшееся под руку командой echo, накапливать тестовое содержимое в переменной, а затем вывести эту переменную один раз: $mytext="variant 1";$mytext.=" encode";$mytext.=" access";echo $mytext; Обратите внимание, что операция конкатенации записана в сокращённом виде: $mytext.=, а не $mytext=$mytext.. Экономия времени — до десятикратного сокращения времени вывода. Впечатляет? Трюк 8: передача массива из полей типа checkbox. Трюк № 1 позволяет нам передавать из HTML-формы массивы. А в данном трюке проанализируем другую ситуацию: преположим, нам надо передать массив из формы, в которой есть только поля типа checkbox (это такой маленький квадратик, в котором при нажатии появляется галочка). К примеру, у нас имеется список городов, из которого пользователь может выбирать нужные ему города, но при отправке данных мы хотим отправлять не только идентификаторы выбранных пользователем городов, но и названия последних. А скрытые поля типа hidden рядом с чекбоксами нам делать очень не хочется (чтобы не утяжелять код страницы и массу отправляемых на сервер данных). Как быть? Выход очень прост. Как известно, по умолчанию поле типа checkbox (вот такое, можете даже нажать на него: ) обычно может иметь значение «on» (поле выбрано, то есть в нём стоит галочка) или «off» (поле не выбрано). Для поля также можно указать альтернативное значение, например, 1. Однако далеко не все задумываются о том, что для этого поля можно указать вообще любое значение, да хоть текст романа «Война и мир». И это значение будет аккуратно передано серверным скриптам на анализ и обработку: <checkbox name="select_car" value="toyota_land_cruiser"> Пользователь выбирает нужные пункты, нажимает кнопку «Отправить», и на сервер отправляется массив из выбранных чекбоксов, в котором опция name чекбоксов является названием переменной, а опция value — её значением. Применительно к PHP это равнозначно строке: $select_car = "toyota_land_cruiser"; А теперь снова вспомним про трюк № 1. Предположим, мы не хотим анализировать кучу переменных, а хотим вместо этого проанализировать один-единственный массив. Тоже несложно: <checkbox name="select[car] value="toyota_land_cruiser"> ...и в результате появления двух квадратных скобок вокруг слова «car» в аргументе опции name чекбокса на сервер отправляется уже не переменная $select, а элемент массива $select с ключом «car» и значением «toyota_land_cruiser». Итог? Весьма неплохой: из одного-единственного чекбокса мы передали серверу аж целых три параметра — наименование массива, ключ элемента и его значение, безо всяких дополнительных скрытых полей и лишнего HTML-кода. Трюк 9: собственные теги. Каждый раз при создании нового кнтейнера задумываешься: что выбрать — <p>, <span>, <div>? Да, у каждого из этих тегов есть свои стартовые особенности: div, как правило, изначально имеет свойство «display:block;», а span — «display:inline-block;», но изменить все эти свойства при помощи каскадных стилей — дело нескольких минут. Ну а если так — почему бы не выбрать в качестве контейнера собственный тег? Да, современные стандарты HTML вполне позволяют это делать, поэтому не удивляйтесь и не лезьте в справочник HTML, увидев у кого-нибудь в коде что-то вроде <pricelist>...</pricelist> — а ещё лучше, возьмите этот приём на вооружение. Комментариидобавить комментарий | |
© Taxpert. Интернет-мастерская М. Ю. Уткина. | |
19.12.2013 20:07 Комментирует Квентин:
Весьма коротко и доступно! Великолепное описание маленьких тонкостей программирования большинство из которых я обязательно буду использовать в дальнейшем!Спасибо вам огромное :)
13.04.2014 17:27 Комментирует Mix:
Вреш не работает твой метод
Ответ автора сайта: Не вру. Если руки растут откуда надо, то всё работает.
18.09.2014 20:20 Комментирует Коля:
Читать невозможно, глаза режетАДМИН, смени цветовую схему
Ответ автора сайта: Спасибо за совет, Николай, возможно, так и сделаю со временем.
04.09.2015 13:58 Комментирует влад:
смени цвет!!!! инфа полезная, но читать не возможно. ушел из за цвете.
14.09.2015 09:40 Комментирует Сергей:
Трюк 9 пригодился, спасибо