php трюки и хитрости
PHP: Полезные фишки и лайфхаки, о которых Вы могли не знать
Сегодня я решил рассказать о нескольких повседневных приемах, которые я часто применяю в повседневном рабочем процесс. Возможно о некоторых фишках Вы не знали и они будут Вам полезны…
Второй хак заключается в том, что бы Вы собирали часто используемые функции в одном месте. Пишите свои мини (а может и не мини) библиотеки. Это экономит огромное количество времени — все что Вам нужно всегда будет под рукой. Да, это тоже распространяется на любой язык программирования 🙂
Теперь, пожалуй более детально перейдем к PHP.
3) Создавайте переменные одного типа, с одним и тем же начальным значением в одну строку.
4) Используйте краткую запись условного оператора if.
5) Используйте inline (анонимные) функции, если они нужны всего один раз.
6) Пользуйтесь функцией print_r с возвратом значения в виде строки а не выводом на экран. Это очень удобно использовать для логирования запросов.
7) Всегда проверяйте данные на пустоту/наличие. Это позволит избежать Notice которые добавляют кучу мусора в логи.
8) Используя цикл for, создавайте переменные цикла и итерационные действия внутри объявления цикла.
9) Вычисляйте количество итераций цикла заранее, если возможно, применяйте хак #8.
10) Используйте предопределенные константы __DIR__, PHP_EOL, __FILE__, __LINE__, DIRECTORY_SEPARATOR и другие. Они помогут вам избежать огромной головной боли.
12) Создавайте переменные внутри условий.
13) Используйте статические классы для хранения настроек одной группы, вместо создания множества переменных.
14) Не забывайте про функцию implode, которая является обратной функцией explode.
15) Пишите условия читабельно. Дробите логическое выражение на несколько строк, стараясь вынести в начало уже подсчитанные значения, или значения которые требует меньших вычислительных затрат.
Php трюки и хитрости
Несмотря на свою легкость и универсальность, php является очень функциональным языком. Он не такой гибкий, как C конечно, но и у него есть свои хитрости. Я еще не матерый профессионал в области программирования на php, но уже успел нахвататься несколько php трюков и хитростей при работе на php.
В этом посте я составил небольшую подборку, которая будет полезна как новичкам, так и некоторым профессионалам.
Меняем массив через foreach.
Почти в любом php-скрипте используются массивы, а следовательно, и циклы. Самым популярным является цикл foreach. При обработке массивов этим циклом, очень часто приходится их изменять, но как, вы уже успели заметить, если сделать так:
Это происходит из-за того, что цикл foreach работает не с самим массивом, а его копией. Почти все знают, что это можно исправить так:
Но, есть и еще один вариант. Мне этот вариант больше нравится, он более наглядный и с ним проще работать, когда есть вложенные циклы:
Передаем массивы в функции.
Полей может быть еще больше. Допустим, что этот метод добавляет пользователя в БД.
Довольно сложно будет потом прочитать этот запрос, не правда ли? Но есть один способ его сократить, точнее функция:
Функция extract преобразовывает массив в переменные. Кстати говоря, такой php трюкприменяется в исходниках wordpress.
Использование переменных переменных.
Более того, можно и функции так использовать:
Но это скорее малоизвестная возможность, чем хитрость. А хитростью можно назвать использование недопустимых имен переменных в php, с помощью этой конструкции:
Игнорируем браузер пользователя.
Я сам редко сталкивался с такой ситуацией, но для больших проектов это наверняка часто встречающаяся проблема. Предположим, что скрипт выполняет какие-то запросы в базе данных (удление/добавления/редактирование) и во время этого пользователь нажимает кнопку Stop в браузере. По этой команде php скрипт завершает свою работу, что, в нашем случае может оказаться чреватым нарушением целостности базы данных.
Эта проблема решается функцией ignore_user_abort():
Пока что все. Удачи и до встречи.
cryptus.
Интересные возможности языка PHP
В данной статье я хочу рассказать о интересных, но не очень распространенных базовых возможностях языка PHP. Все, что написано далее в том или ином виде присутствует в документации к PHP в разрозненном виде. Автор вполне отдает себе отчет в том, что большинство профессиональных разработчиков все это отлично знает, но новички могут узнать что-то новое.
Содержание статьи имеет мало общего с моей прошлой статьей про использование выражений в PHP. Речь не идет об усложнении кода, скорее наоборот.
Команда BREAK.
Многие почему-то считают, что break может использоваться исключительно в конструкциях switch. Это заблуждение. Кроме switch, она используется в циклах. Кроме того, у команды есть необязательный параметр – число уровней, из которых надо выйти. Например:
Команда CONTINUE
Как и break имеет параметр – число уровней возврата к циклу.
Кстати, в конструкции switch команда continue дает точно такой же эффект, что и break. Поэтому, если у вас внутри цикла находится оператор switch, и вы внутри него попытаетесь выполнить continue, то у вас произойдет просто break из свича, а не возврат к началу цикла. В этом случае для получение ожидаемого нужно сделать continue 2;
Команда include
А вы знаете, что include скрипта работает точно так же, как вызов функции, а именно может возвращать значения, отдаваемые командой return в процессе выполнения этого скрипта? То есть можно сделать так:
Конечно, это касается остальных подобных команд (include_once, require, require_once).
Цикл for
О том, что в for в первом и третьем параметре можно перечислять выражения, я уже говорил в статье использовании выражений в PHP. Там и пример есть.
Команда DECLARE
Заслуженно можно сказать, что это самая редкоиспользуемая базовая конструкция в PHP. Она нужна для установки директив интерпретатору при выполнении кода. На данный момент существует только одна директива – ticks.
Declare (ticks=n) – говорит интерпретатору (создает событие), что ему нужно что-то обработать через каждые n тиков. Тик – это выполнение одного базового действия php. Кроме этого, с помощью специальной функции register_tick_function() установить функцию, которая будет выполнена при возникновении события, иначе конструкция бессмысленна.
На практике declare можно использовать для профайлинга скриптов. Т.е. благодаря тикам можно замерять время, потраченное на выполнение каждой вашей операции (или их группы) в скрипте.
PHP+HTML: маленькие хитрости 1
Как и во всяком ремесле, в PHP существует масса всевозможных хитростей, ощутимо помогающих облегчить жизнь простого программиста. Вот некоторые из этих хитростей.
Прим.: не забудьте почитать также «Шпаргалка по трюкам в PHP»
Трюк 1: передача массивов из формы.
Из HTML-формы можно передавать не только значения (переменные), но и массивы. Это делается очень просто:
При отправке данных из формы с таким полем PHP-скрипт получит значение из поля input не как переменную, а как элемент массива nazvanie с ключом «gorod» и значением «newyork». При автоматическом формировании формы (скажем, при генерации прайс-листа со множеством наименований) — трюк поистине незаменимый, да и обработку массива скриптом куда проще организовать, чем анализ кучи переменных с названиями вроде tovar1, tovar2 и т. д.
Трюк 2: сокращённая форма записи условия в PHP.
. гораздо проще (и короче) изложить в сокращённой форме:
Трюк 3: анализ HTML-кнопок типа «submit».
HTML-кнопка «submit», как известно, отправляет данные HTML-формы серверу (в нашем случае на обработку PHP-скрипту). А как быть, если в форме нужны несколько кнопок, предусматривающих разные варианты обработки данных? Столкнувшись с этой задачей, почему-то мало кто вспоминает, что у кнопок типа «submit» есть собственный атрибут «value». Нет, конечно, всем известно, что этот атрибут выводит надпись на кнопке, иного же значения ему, как правило, не придают. Между тем в случае наличия у кнопок типа «submit» атрибута «name» текст подписей на кнопках отправляется из формы на сервер наряду с прочими данными и может быть проанализирован скриптом, что и позволит произвести столько разных обработок данных по нажатию разных кнопок типа «submit», сколько душе заблагорассудится. Преимущество трюка в том, что никаких полей типа «hidden» в этом случае не требуется.
Трюк 4: несуществующие параметры функций PHP.
Общеизвестно, что при обращении к функциям в PHP необходимо указывать ровно столько же переменных, сколько должна принимать функция:
Куда менее известно, что для переменных в заголовке функции можно указывать значения по умолчанию (для использования в случае отсутствия значений переменных или самих переменных при обращении извне), что позволит обращаться к функции с любым количеством переменных или вообще не указывать их:
Трюк 5: предотвращение кэширования JS-скриптов и CSS-стилей.
Сколько народу ежедневно ругается, изменив содержимое JS-скрипта или стилей CSS и обнаружив, что браузер прочно закешировал старую версию и ни в какую не желает показывать результаты работы новой. Особенно те, у кого в компании доступ в интернет осуществляется через прокси-сервер. Чего только не предпринимается в подобных случаях: в meta-раздел ставятся заголовки с истекшим сроком давности, meta-теги антикеширования и т. д. Между тем иногда достаточно поставить после упоминания соответствующего файла псевдопараметр в виде случайного числа, генерируемого коротеньким кусочком кода PHP:
. чтобы при открытии страницы всегда подгружалась исключительно свежая версия файла.
Трюк 6: кавычки, апострофы и интепретация текста.
К выбору контейнера для стринговых (текстовых) значений зачастую принято подходить несколько небрежно. А зря: многие забывают, что содержимое двойных текстовых кавычек («) интерпретатор PHP всегда анализирует на предмет наличия переменных, тогда как к содержимому контейнеров из одиночкых кавычек (апострофов) он абсолютно равнодушен, отображая их точно символ в символ без интерпретации.
Поэтому тексты с переменными удобнее заключать в неразрывные двойные кавычки:
Зато неудобочитаемый код с апострофами выполняется заметно быстрее, особенно в циклах:
Трюк 7: мгновенный вывод.
Ещё один отличный способ ускорить выполнение сценария — вместо того, чтобы немедленно и каждый раз выводить всё попавшееся под руку командой echo, накапливать тестовое содержимое в переменной, а затем вывести эту переменную один раз:
Обратите внимание, что операция конкатенации записана в сокращённом виде: $mytext.=, а не $mytext=$mytext.. Экономия времени — до десятикратного сокращения времени вывода. Впечатляет?
Трюк 8: передача массива из полей типа checkbox.
Трюк № 1 позволяет нам передавать из HTML-формы массивы. А в данном трюке проанализируем другую ситуацию: преположим, нам надо передать массив из формы, в которой есть только поля типа checkbox (это такой маленький квадратик, в котором при нажатии появляется галочка). К примеру, у нас имеется список городов, из которого пользователь может выбирать нужные ему города, но при отправке данных мы хотим отправлять не только идентификаторы выбранных пользователем городов, но и названия последних. А скрытые поля типа hidden рядом с чекбоксами нам делать очень не хочется (чтобы не утяжелять код страницы и массу отправляемых на сервер данных). Как быть?
Выход очень прост. Как известно, по умолчанию поле типа checkbox (вот такое, можете даже нажать на него: ) обычно может иметь значение «on» (поле выбрано, то есть в нём стоит галочка) или «off» (поле не выбрано). Для поля также можно указать альтернативное значение, например, 1. Однако далеко не все задумываются о том, что для этого поля можно указать вообще любое значение, да хоть текст романа «Война и мир». И это значение будет аккуратно передано серверным скриптам на анализ и обработку:
Пользователь выбирает нужные пункты, нажимает кнопку «Отправить», и на сервер отправляется массив из выбранных чекбоксов, в котором опция name чекбоксов является названием переменной, а опция value — её значением. Применительно к PHP это равнозначно строке:
А теперь снова вспомним про трюк № 1. Предположим, мы не хотим анализировать кучу переменных, а хотим вместо этого проанализировать один-единственный массив. Тоже несложно:
Трюк 9: собственные теги.
Каждый раз при создании нового кнтейнера задумываешься: что выбрать —
— а ещё лучше, возьмите этот приём на вооружение.
Комментарии
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 Комментирует Сергей:
Странные операторы в PHP
Если вы прочитаете документацию по PHP, вы узнаете о массе операторов. Если вы не знаете ещё PHP-операторы, сперва изучите их, а потом вернитесь к прочтению этой статьи.
Судя по первым комментариям, хочу извиниться за плохой перевод, опыта у меня в этом мало, но хотелось перевести статью. Я буду рад любой критике относительно качества перевода, особенно за любые улучшения. Спасибо за внимание!
Вероятно, вы думаете, что знаете документацию PHP вдоль и поперёк, но всегда найдётся, чему поучиться. Поэтому я глубоко погрузился в код ядра PHP и посмотрел некоторые особенные операторы PHP, менее известные, но очень полезные в ежедневной работе.
Итак, вот 10 операторов PHP, которые вы должны знать в 2018 году!
Оператор b’
Оператор []=
Короткий оператор добавления нового элемента в массив. Он работает так, как вы и ожидаете — добавляет элемент справа в массив слева.
К сожалению, в официальном руководстве нет ни слова об этой замечательной возможности.
Оператор ––>
Оператор «стрелки влево» для массивов [$a => для массивов, но они также поддерживают зеркальную версию этого оператора следующим образом:
Это очень удобно для очень молодых программистов, а также тех, кто постарше, всё ещё использующих зеркальное написание. Этот оператор также имеет возможность превращать оба операнда в логическое значение, для более компактного хранения.
Имена констант с *, %
Константы хороши и эффективны, пока вам вам не захочется больше свободы в их синтаксисе. Хотя в руководстве указано, что имя константы должно содержать только буквы, символы подчёркивания и цифры, но также разрешено использовать специальные символы типа * или % в имени. Например, следующим образом:
Единственное, нужно убедиться, что константы A и B существуют, а в результате их умножения получается значение предполагаемой константы. Это ещё одна хорошая причина, чтобы избегать использование простых чисел в качестве значений в константах.
Операторы «кораблей»
Итак, все знают об операторе «космический корабль» с момента выхода PHP 7. Но менее известно, что одновременно с этим релизом был введён целый флот космических кораблей для проведения крупномасштабных операций.
Крошечный космический корабль
X-истребители
Линейный корабль
Разве не лучший способ написать так?
Звезда Смерти
Многие из вас бы спросили, а был ли встроен в PHP оператор «звезда смерти», и ответ таков: в данный момент неизвестно. Есть планы на это, но никто никогда не видел реального экземпляра. Мне бы очень хотелось видеть оператор в три строки, так как PHP будет первым, кто будем иметь подобное (и, когда это произойдёт, надеюсь, не с моего счёта спишут стоимость этого оператора).
Безумие оператора PHP
Операторы PHP — аккуратные и эффективные. Мы надеемся, что эти менее известные операторы научили вас кое-чему в PHP.
Проверьте приведённые примеры кода: все они работают в PHP 7.2.5, кроме «звезды смерти». Они могут иметь некоторые предварительные условия, поэтому обязательно прочитайте документацию перед их использованием.