Поиск по сайту:
taxor.ruБлог — PHP+HTML: маленькие хитрости 1

PHP+HTML: маленькие хитрости 1

Секция: Сайтостроение и WEB-разработка

Просмотров: 8233

Комментарии (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> — а ещё лучше, возьмите этот приём на вооружение.

Комментарии

добавить комментарий

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 пригодился, спасибо


© «Таксор». Интернет-мастерская М. Ю. Уткина.