что можно сделать на php
Что можно сделать на php
Reg.ru: домены и хостинг
Крупнейший регистратор и хостинг-провайдер в России.
Более 2 миллионов доменных имен на обслуживании.
Продвижение, почта для домена, решения для бизнеса.
Более 700 тыс. клиентов по всему миру уже сделали свой выбор.
Бесплатный Курс «Практика HTML5 и CSS3»
Освойте бесплатно пошаговый видеокурс
по основам адаптивной верстки
на HTML5 и CSS3 с полного нуля.
Фреймворк Bootstrap: быстрая адаптивная вёрстка
Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.
Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.
Верстайте на заказ и получайте деньги.
Что нужно знать для создания PHP-сайтов?
Ответ здесь. Только самое важное и полезное для начинающего веб-разработчика.
Узнайте, как создавать качественные сайты на PHP всего за 2 часа и 27 минут!
Создайте свой сайт за 3 часа и 30 минут.
После просмотра данного видеокурса у Вас на компьютере будет готовый к использованию сайт, который Вы сделали сами.
Вам останется лишь наполнить его нужной информацией и изменить дизайн (по желанию).
Изучите основы HTML и CSS менее чем за 4 часа.
После просмотра данного видеокурса Вы перестанете с ужасом смотреть на HTML-код и будете понимать, как он работает.
Вы сможете создать свои первые HTML-страницы и придать им нужный вид с помощью CSS.
Бесплатный курс «Сайт на WordPress»
Хотите освоить CMS WordPress?
Получите уроки по дизайну и верстке сайта на WordPress.
Научитесь работать с темами и нарезать макет.
Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!
Хотите изучить JavaScript, но не знаете, как подступиться?
После прохождения видеокурса Вы освоите базовые моменты работы с JavaScript.
Развеются мифы о сложности работы с этим языком, и Вы будете готовы изучать JavaScript на более серьезном уровне.
*Наведите курсор мыши для приостановки прокрутки.
15 творческих идей использования PHP
Если Вы неплохо знаете основы PHP, то, вероятно, уже задумывались о том, как сделать Ваш сайт более привлекательным. Количество возможностей бесконечно, и Вы можете как писать свои собственные скрипты, так и встраивать в Ваши проекты уже существующие решения.
Давайте совершим обзор 15 творческих идей использования PHP для Ваших сайтов!
1. Электронная коммерция
Если Вы хотите создать свое собственное приложение вроде корзины заказа, то Вы можете либо написать весь код самостоятельно с нуля, либо воспользоваться PHP-фреймворком.
Если Вы новичок в PHP, я бы предложил Вам использовать существующие решения для электронной коммерции. Некоторые из возможных решений:
Разумеется, каждое из решений имеет свои особенности, однако часто бывает проще потратить несколько дней на изучение документации и обучающих видео, чем изучать PHP с нуля. Это уже зависит от того, сколько времени Вы готовы выделить на данный вопрос.
2. Инструменты управления проектами
Есть несколько великолепных инструментов управления проектами, выполненных как веб-приложения. Если Вы можете позволить себе такой сервис с оплатой за время использования, то я рекомендую Вам Basecamp.
Тот, кто не готов оплачивать услуги сервиса на регулярной основе, может создать свою собственную систему.
Создание такого инструмента с нуля потребует достаточно глубоких знаний PHP и некоторых познаний в области JavaScript.
Наиболее важные аспекты такого рода приложений это безопасность, отслеживание времени, совместные списки дел, обмен файлами, доска сообщений и «живое» превью веб-сайта.
Конечно, Вы можете по своему желанию сужать или расширять этот список. Ключевой момент здесь в том, что Вы можете значительно повысить Ваш уровень владения PHP уже в процессе написания такого приложения, а Ваши клиенты будут счастливы следить за тем, как их проект постепенно «обретает форму».
Рассказ о том, как стартовать в этом деле, выходит за рамки данного обзора, однако я надеюсь, что дал Вам хороший базис для генерации новых идей.
3. GUI (Графический интерфейс пользователя)
Для тех, кто впереди планеты всей
Вы можете расширить базовый установочный пакет PHP и создавать десктоп-приложения. Это непросто, и потребует от Вас глубоких познаний и отличных навыков программирования на PHP. При этом может быть и так, что такие приложения легче создавать, используя другие языки программирования и технологии.
Главное преимущество такого подхода в том, что Вы узнаете очень много о самом языке в процессе работы.
4. Построение онлайн-сообщества.
Посвящен ли Ваш сайт бизнесу, развлечениям, продуктам или услугам, интернет-пользователи хотят быть «подключены» к процессу.
К примеру, если Вы разрабатываете веб-приложения, то создание форума, где Ваши клиенты могли бы обсудить интересующие их вопросы и задать их Вам, было бы отличной идеей.
Как у пользователя, у меня возникает вопрос, и мне нужна «скорая помощь», при этом стандартная система тикетов или поддержка по e-mail может быть не столь оперативной. С онлайн же сообществом Ваши посетители могут помогать друг другу решать вопросы, касающиеся Вашего товара или услуги даже без Вашей помощи.
При этом такое общение часто не ограничивается общими фразами, и люди способны оказать друг другу даже техническую поддержку.
Поэтому, если Вам необходимо оказывать послепродажную поддержку своим клиентам, создание сообщества будет прекрасной идеей, т.к. позволит Вам значительно уменьшить временные затраты на поддержку, а также получать полезную обратную связь.
Опять же, Вы можете написать свой «движок» для будущего комьюнити, либо воспользоваться одним из готовых решений и внедрить его в Ваш сайт.
Если хотите писать такое приложение с нуля, то лучше используйте PHP-фреймворк. CodeIgniter, к примеру, имеет кучу хэлперов и классов, которые позволяют Вам избавиться от значительного объема рутинной работы, сопровождающей каждый серьезный проект.
Можете также применять различные инструменты для создания форумов:
5. Разработка приложений для Facebook
Вы можете интегрировать Facebook в Ваш сайт с помощью PHP. Если Вы разрабатывали приложения для Facebook на других языках, или Вы хотите только начать, то Вики для разработчика Facebook к Вашим услугам. Там Вы найдете всю необходимую информацию, если Вы собираетесь писать приложения для Facebook.
6. Генерация PDF-файлов
Где это может быть нужно?
К примеру, у Вас есть приложение, в котором клиенту выставляется счет и Вы хотите, чтобы помимо html-страницы можно было сгенерировать PDF-документ с выставленным счетом для дальнейшей его распечатки или отправки клиенту по e-mail.
7. Парсинг XML-файлов
PHP позволяет Вам производить синтаксический анализ (разбор) XML-файлов. Это важная особенность в PHP5, и она позволяет обойти одно существенное ограничение: не все браузеры на данный момент могут выводить содержимое XML-файлов.
Работа с XML в PHP во многом сходна с открытием, закрытием и чтением файлов. Сначала пишется XML-парсер, устанавливаются функции, обрабатывающие открывающие и закрывающие XML-тэги, затем файл открывается на чтение, после чего закрывается.
Вы можете самостоятельно написать скрипт, который будет рассылать Вашим клиентам новостные рассылки и Ваши коммерческие предложения, либо использовать уже готовый скрипт или сервис.
На официальном сайте PHP Вы найдете подробное описание функции mail с примерами. Также Вы можете скачать и установить готовый скрипт вроде PHP list.
Кроме того, Вы можете воспользоваться аналогичными сервисами. Из Отечественных разработок я рекомендую SmartResponder.
9. Обработка и генерация изображений
Используя совместно с PHP библиотеку GD, Вы можете нечто большее, чем просто выводить информацию в браузер. Вы можете выводить изображения в различных форматах, включая jpeg, png и gif. Эта функция в PHP полезна, т.к. позволяет Вам создавать мини-картинки для предпросмотра, водяные знаки, изменять размер изображения и производить его обрезку. Вы даже можете создавать фотогалереи!
10. Создавайте графики и диаграммы
Вам нужно числовое представление неких чисел на Вашем сайте? PHP позволяет создавать Вам как графики, так и диаграммы!
Используя pChart Вы можете создавать несколько разновидностей диаграмм, включая круговые и столбчатые. Это очень полезно для коммерческих проектов, когда нужно представить графическую информацию в сжатом и наглядном виде.
Веб-сайт pChart содержит руководство по тому, как Вам стартовать в этом вопросе.
11. CMS (Системы Управления Контентом)
12. Создайте фотогалерею на PHP
Используя стандартные функции PHP для работы с файлами, Вы можете создать собственную фотогалерею. Начните с того, что поместите все фотографии в определенную директорию, после чего используйте функцию exif для получения информации о картинке и вывода ее уменьшенной копии для предпросмотра.
Процесс в точности так же прост, каким и кажется, и это отличный способ представить Вашу фотоколлекцию.
13. Создавайте динамические шаблоны для сайтов.
С применением PHP гораздо проще добавлять на сайт новые страницы и элементы динамически. Вы начинаете с того, что создаете HTML-страницу и разбиваете ее на отдельные части, вроде хэдера, зоны основного контента, футера и т.п.
Добавьте расширение .php ко всем последующим новым страницам и используйте инструкцию include для подключения хэдера и футера к каждой из новых страниц. Также Вы можете создавать динамические сайдбары и навигационные секции.
В действительности, чем более «шаблонизирован» Ваш сайт, тем проще обновлять его содержимое.
14. Создавайте плагины для WordPress
Если Вы знакомы с WordPress, то знаете, что это достаточно гибкая система для блоггинга, которую можно использовать для самых разнообразных целей.
Если Вы знаете PHP и покопаетесь в «Кодексе» WordPress, то найдете все что нужно для того, чтобы начать разработку плагинов к нему. Если Вы ищете свежие идеи для создания своего «мега-плагина», то загляните в специальный раздел, где пользователи вносят свои предложения относительно того, что они хотели бы увидеть.
Хорошо или плохо, если сайт целиком выполнен на флэш? Вопрос достаточно спорный, однако нет ничего плохого в том, чтобы использовать на сайте отдельные флэш-элементы и блоки. И PHP поможет Вам в этом.
Используйте специальную библиотеку Ming для создания flash-файлов в формате .swf. C помощью этой библиотеки Вы можете генерировать видео, текст, и даже flash-анимацию.
Вот мы и рассмотрели в обзорном порядке 15 интересных возможностей использования PHP для улучшения Ваших (и не только Ваших) веб-сайтов. Что-то можно сделать при возникновении реальной необходимости, а с чем-то можно и «поиграть» в качестве профессиональной тренировки:)
Перевод: Дмитрий Науменко
По материалам http://net.tutsplus.com
Иллюстрации к статье: http://blog.calevans.com
P.S. Хотите посерьезнее «покопать» PHP? Обратите внимание на премиум-уроки по различным аспектам сайтостроения, включая программирование на PHP, а также на бесплатный курс по созданию своей CMS-системы на PHP с нуля:
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Интересные возможности языка 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 и почему его все ненавидят
Несмотря на то, что 83% сайтов в интернете работают на PHP.
История языка
Изначально PHP расшифровывался как Personal Home Page Tools — инструменты для создания персональных страниц. Дело в том, что раньше, чтобы сделать функциональный сайт, чаще всего использовали C, Perl и CGI-скрипты. Звучит сложно, на деле — тоже сложно. Единственным способом сделать что-то своё и не изучать при этом три тома по программированию был PHP.
Например, можно сделать так:
Привет! А вы знаете, что
В результате на странице получится строчка: «Привет! А вы знаете, что этот код написан на PHP?»
Ещё можно создавать целые PHP-файлы и писать весь код там, а потом просто подключать эти файлы в нужный момент. Получается, что с PHP можно работать в двух режимах: писать код прямо в коде страницы или выносить всё в отдельные файлы.
PHP — это просто
Именно простота этого языка принесла ему дурную славу: слишком много появилось плохого кода, который на первый взгляд работал хорошо. Посмотрите сами: начать писать на PHP действительно просто.
Комментарии и точка с запятой. Комментарии можно ставить в любом месте — достаточно написать два слеша подряд. А точка с запятой ставится после каждой команды — точно так же, как в С, Pascal, JavaScript и ещё в сотнях других языков.
Объявление переменных. Чтобы объявить переменную, нужно просто поставить знак доллара, после него написать название переменной и присвоить ей какое-то значение.
Вывод на экран. В HTML-коде достаточно вставить команду echo, которая помещает текст в то место, откуда вызвали команду. Например, этот код покажет заголовок первого уровня с текстом «Заголовок, собранный на PHP»:
И этот код сделает то же самое:
Ещё в PHP есть классы и объекты, автоматическое приведение типов (хотя мало кто понимает, как оно там работает в сложных примерах) и множество встроенных функций, которые упрощают разработку и помогают быстро писать код. А самое главное — PHP сам заставляет работать любой код, если он хоть как-то написан по правилам языка. Даже если внутри будет полная чушь, но похожая на PHP-код — интерпретатор его старательно выполнит, и, скорее всего, многое из этого будет даже работать.
Для чего нужен PHP
Собирать страницы из модулей. Если помните, PHP-код можно встраивать в HTML-страницы, а можно сохранять как отдельные файлы. В этом случае мы получаем мини-модули, каждый из которых отвечает за что-то одно. Например, в одном мы пишем, как будет выглядеть шапка сайта, в другом — меню, третий файл будет отвечать за подвал, четвёртый — за блок с отзывами о товарах.
Если у нас интернет-магазин и на каждой странице товара нужно показать шапку сайта и подвал, можно каждый раз прописывать это вручную, а можно собрать на PHP. Для этого достаточно в теле страницы написать что-то такое:
PHP возьмёт файл header.php, в котором мы написали, как должна выглядеть шапка сайта, и поставит её в начало страницы. То же самое сделает и с подвалом — файлом footer.php, и так будет на каждой странице товара. Получается, что нам не нужно писать один и тот же код шапки и подвала на каждой странице, достаточно сделать это в одном месте, а потом подключать одной строчкой.
Создавать CMS и движки для сайтов. Такие модульные возможности PHP привели к тому, что большинство современных систем управления контентом на сайтах написаны на PHP. Смотрите сами:
Если вы на бесплатном хостинге используете какой-то инструмент для создания или поддержки сайта, скорее всего, он тоже будет написан на PHP.
Работать с формами и данными на странице. HTML плохо умеет работать с формами и отправлять куда-то данные, которые вы вводите в поля регистрации. PHP справляется с этим гораздо лучше: вы говорите, из какого поля что нужно взять и по какому адресу отправить, а всё остальное интерпретатор делает за вас.
Запоминать пользователей и делать формы авторизации. Если вам нужно быстро написать свою форму регистрации на сайте или запоминать посетителей даже без регистрации, то PHP — самый простой вариант решения этой задачи. Единственное, что нужно знать — как работать с базами данных, где хранятся записи о пользователях, потому что PHP это тоже умеет.
Почему все ненавидят PHP
По старой памяти, когда ужасного кода было много. Простота вхождения в этот язык привела к тому, что невозможно было нормально поддерживать сайт, написанный кем-то на PHP. Этот язык позволял раньше (сейчас меньше, но тоже есть) много вольностей с типами данных, переменными, обращениями к базе данных, поэтому разобраться было почти нереально.
Кроме этого, раньше в PHP было много уязвимостей, через которые можно залезть в базы данных пользователей или что-то поломать на сайте. В новых версиях большинство дыр уже устранили, но тогда это стало реальной проблемой.
Смешанный код. Писать в одном файле на PHP и HTML можно, если у вас всего одна форма обратной связи. Но когда весь сложный код на PHP расползается по всей странице, то это сильно мешает разобраться, что же там происходит на самом деле.
Любые переменные в любом месте. Понадобилась новая переменная? Объявите её на любом участке кода и сразу берите в работу. Это удобно для первоначальной разработки, когда ты просто берёшь новую переменную там, где она понадобилась, и делаешь с ней что хочешь. Но когда проходит время или кто-то другой хочет разобраться в коде, то такой подход сильно затрудняет работу.
Например, можно написать так:
Когда новый программист захочет понять, за что отвечают переменные а и b, он найдёт место, где они объявляются, и посмотрит, какого они типа и для чего использовались вначале. Но разработчик мог в процессе передумать и начать использовать эти переменные для других целей с новыми типами данных. Чтобы это понять, нужно просмотреть весь код и разобраться в логике, а это долго и трудно.
Стоит ли учить PHP?
Зависит от задачи. Дело в том, что не менее 80% сайтов уже сейчас работают на PHP: это значит, что их нужно будет еще какое-то время поддерживать. Ещё лет 5–10 спрос на PHP точно будет.
Однозначно стоит учить PHP, если хотите работать с Вордпрессом, Друпалом, Джумлой и другими известными системами управления сайтами. Они написаны на PHP, и все надстройки и дополнения — тоже. Хороший разработчик WordPress сейчас на вес золота.
Будут ли веб-разработчики массово переходить на другие технологии — вопрос открытый. Сейчас, если вы покупаете виртуальный хостинг, вам сразу включают интерпретатор PHP, потому что все его используют. А другие технологии типа Python или Node.js — не включают, их нужно устанавливать отдельно.
Но ведь и веб — это не навсегда. Ещё лет 20, и понятие веб-сайта может безнадёжно устареть, потому что люди будут в приложениях, соцсетях или ещё где похуже.
Наверное, ответ на вопрос такой: если вам до 20 лет, то уже не надо учить PHP. А если ближе к 40–50 и вы хотите заниматься вебом — то определённо да.
Что дальше
В следующей серии попрактикуемся в PHP — напишем свой код для пользы дела или для развлечений.
Зачем нужен PHP
Что такое PHP
Серверный. PHP скрипты выполняются на сервере. Этим язык PHP отличается от HTML, CSS и JavaScript, код которых выполняется браузером.
Скриптовый. Когда вы запускаете программы вроде Excel или Photoshop, предполагается, что они могут работать без временных ограничений, ожидая от вас всё новые и новые команды.
PHP устроен иначе. PHP скрипты предназначены для единовременного выполнения набора команд. Скрипт запустился, выполнил свою задачу и «умер». И так при каждом запуске.
Зачем нужен PHP
Язык PHP нужен для написания программ, которые работают на сервере и выполняют различные серверные задачи, такие как отправка почты, взаимодействие с базой данных и т.д.
Разберём подробней на примерах.
Пример 1: обработка форм
Практически на любом сайте можно встретить форму вроде этой:
Формы имеют самое разное назначение: регистрация и авторизация, оформление заказа, оплата чего-либо, комментарии на форуме и множество других функций.
Так вот. С помощью HTML и CSS мы можем определить внешний вид формы. С помощью Javascript мы можем добавить красивые анимационные эффекты.
Но мы не можем обработать данные, которые содержатся в этой форме. Нельзя сохранить информацию о клиенте в единой базе данных, авторизовать пользователя, отправить письмо ему на E-mail и т.д.
Для решения подобных задач нам необходим специальный язык программирования, который может работать на сервере. Одним из таких языков и является PHP.
Пример 2: генерация HTML
PHP также используется для автоматической генерации HTML страниц.
Крупные интернет-магазины могут иметь тысячи наименований товаров. Мы, конечно, могли бы создать для каждого товара отдельную html-страницу, но представьте, сколько времени уйдёт на создание этих страниц.
Благодаря связке PHP и любой современной СУБД (системы управления базами данных) мы можем создать всего один html-шаблон, а PHP уже будет подставлять в него товары из базы данных.
Для чего подходит PHP
Также PHP подходит для написания консольных скриптов. Запускать их можно как разово, так и с определённой периодичностью.
Что касается десктопных приложений, здесь у PHP достаточно скудный инструментарий, поэтому на практике PHP не подходит для написания настольных и мобильных приложений.
Современный PHP без фреймворков
У меня есть для вас непростое задание. Когда в следующий раз начнёте новый проект, постарайтесь обойтись без PHP-фреймворка. Я не собираюсь перечислять недостатки фреймворков, и это не проявление синдрома неприятия чужой разработки: в этом руководстве мы будем использовать пакеты, написанные разработчиками нескольких фреймворков. Я всецело уважаю инновации в этой сфере.
Но эта статья не о них. Она о вас. О возможности стать лучше как разработчик.
Возможно, главным плюсом отказа от фреймворка станет знание, как всё работает под капотом. Вы будете видеть, что происходит, не полагаясь на фреймворк, который заботится о вас настолько, что вы не можете что-то отладить или до конца понять.
Возможно, ваша следующая работа не позволит вам насладиться запуском нового проекта без фреймворка. Многие важные, критические для бизнеса PHP-задачи подразумевают использование уже существующих приложений. И неважно, будет это приложение, построенное на современном фреймворке вроде Laravel или Symfony, на одной из старых платформ вроде CodeIgniter или FuelPHP — либо это удручающе широко распространённое легаси PHP-приложение с «include-oriented архитектурой»: если сейчас вы будете разрабатывать без фреймворка, то окажетесь лучше подготовлены к любому будущему PHP-проекту.
Раньше создавать без фреймворков пытались потому, что некоторые системы вынуждены интерпретировать и маршрутизировать HTTP-запросы, слать HTTP-ответы и управлять зависимостями. Нехватка стандартов неизбежно приводила к тому, что как минимум эти компоненты фреймворков были тесно взаимосвязаны. Так что если вы начинали разрабатывать проект без фреймворка, то в конце концов приходили к созданию своего собственного фреймворка.
Но сегодня благодаря стараниям PHP-FIG в сфере автозагрузки и взаимной совместимости вы можете разрабатывать без фреймворка, не создавая его попутно. Существует множество замечательных, взаимно совместимых пакетов, написанных многочисленными разработчиками. И собрать их в единую систему гораздо проще, чем вы думаете!
Как работает PHP?
Прежде всего важно понять, как PHP-приложения взаимодействуют с внешним миром.
PHP исполняет серверные приложения в цикле запрос/ответ. Всё взаимодействие с приложением — из браузера, командной строки или REST API — приходит в него в качестве запросов. При получении запроса приложение загружается, обрабатывает запрос и генерирует ответ, который передаётся обратно клиенту, а приложение закрывается. И так происходит при каждом обращении.
Контроллер запросов
Вооружившись этим знанием, начнём с фронт-контроллера. Он представляет собой PHP-файл, обрабатывающий все запросы к вашему приложению. То есть это первый PHP-файл, в который попадает запрос, и (по сути) последний PHP-файл, через который проходит ответ приложения.
Давайте воспользуемся классическим примером с Hello, world!, обслуживаемым встроенным в PHP веб-сервером, чтобы проверить, всё ли настроено корректно. Если вы этого ещё не сделали, то удостоверьтесь, что в среде установлен PHP 7.1 или выше.
Обратите внимание, здесь мы объявляем строгую типизацию — это нужно делать в начале каждого PHP-файла вашего приложения, — потому что подсказки типов (type hinting) важны для отладки и ясного понимания теми, кто будет заниматься кодом после вас.
Далее с помощью инструмента командной строки (вроде Terminal на MacOS) перейдём в директорию проекта и запустим встроенный в PHP веб-сервер.
Теперь откроем в браузере адрес http://localhost:8080/. Отображается Hello, world! без ошибок?
Отлично. Переходим к следующему шагу!
Автозагрузка и сторонние пакеты
Когда вы впервые начали работать с PHP, то, вероятно, использовали выражения include или require для получения функциональности или конфигураций из других PHP-файлов. В целом этого лучше избегать, потому что другим людям потом будет гораздо труднее разобраться в коде и понять, где находятся зависимости. Это превращает отладку в кошмар.
Выход — автозагрузка. Это означает, что, когда вашему приложению нужно использовать какой-то класс, PHP знает, где его найти, и автоматически загружает в момент вызова. Эта возможность существует со времён PHP 5, но стала активно применяться только с появлением PSR-0 (стандарта автозагрузки, сегодня заменён PSR-4).
Можно было бы пройти через тягомотину написания собственного автозагрузчика, но раз мы выбрали Composer для управления сторонними зависимостями, а в нём уже есть очень удобный автозагрузчик, то его мы и будем использовать.
Проверьте, что у вас установлен Composer. Затем настройте его для своего проекта.
Теперь установите для этого проекта Composer, которые подтянет все зависимости (если они уже есть) и настроит для нас автозагрузчик.
Обновите public/index.php для запуска автозагрузчика. В идеале это одно из нескольких выражений include, которые вы используете в приложении.
Если перезагрузить приложение в браузере, вы не увидите никакой разницы. Однако автозагрузчик работает, просто он не делает ничего тяжёлого. Давайте перенесём пример с Hello, world! в автоматически загружаемый класс, чтобы проверить, как всё работает.
В корне проекта создадим папку src и вставим в неё файл HelloWorld.php с таким кодом:
Перезагрузите приложение в браузере и увидите новое сообщение!
Что такое внедрение зависимостей?
Внедрение зависимостей — это методика, при которой каждая зависимость предоставляется объекту, которому она требуется, вместо того чтобы объект обращался наружу за получением какой-то информации или функциональности.
Допустим, методу класса нужно считать из базы данных. Для этого надо к ней подключиться. Обычно новое подключение создаётся с учётными данными, полученными из глобального пространства.
Но это не лучшее решение. На чуждый метод возлагается ответственность за создание объекта нового подключения к БД, получения учётных данных и обработки любых проблем в случае сбоя подключения. В результате в приложении дублируется масса кода. А если вы попытаетесь прогнать этот класс через модульное тестирование, то не сможете. Класс тесно взаимосвязан со средой приложения и базой данных.
Давайте с самого начала не будем усложнять работу с тем, что требуется классу. Просто в первую очередь потребуем, чтобы объект PDO был внедрён в класс.
Получилось гораздо чище и проще для понимания, меньше вероятность ошибок. Благодаря подсказке типов и внедрению зависимостей метод объявляет именно то, что ему нужно для выполнения задачи, и получает необходимое без вызова из себя внешней зависимости. А когда речь пойдёт о модульном тестировании, мы окажемся готовы к моделированию подключения к БД и спокойно пройдём тест.
Контейнер внедрения зависимости — это инструмент, в который вы обёртываете всё ваше приложение ради создания и внедрения этих самых зависимостей. Контейнер не является необходимым, но значительно облегчает жизнь по мере роста и усложнения вашего приложения.
Мы воспользуемся самым популярным DI-контейнером для PHP с изобретательным названием PHP-DI. (Надо отметить, что в его документации внедрение зависимостей описано иначе, и кому-то так будет понятнее.)
Контейнер внедрения зависимостей
Поскольку мы настроили Composer, установка PHP-DI пройдёт практически безболезненно. Для этого снова обратимся к командной строке:
Обновите public/index.php для конфигурирования и сборки контейнера.
Ничего особенного пока не произошло. Это лишь простой пример, где всё необходимое помещено в один файл для удобства наблюдения.
Заметка на полях: автоматическое внедрение зависимостей может быть полезной фичей в начале создания приложения, но в дальнейшем оно усложняет сопровождение, поскольку зависимости остаются относительно скрытыми. К тому же возможно, что через несколько лет другой разработчик подключит какую-нибудь библиотеку, и в результате несколько библиотек будут реализовывать один интерфейс. Это сломает автоматическое внедрение зависимостей и приведёт к непредсказуемому потоку багов. Разработчик, внёсший изменение, может их вообще не заметить.
Давайте ещё больше всё упростим, импортировав пространства имён там, где это возможно.
Пока что выглядит всё так, словно мы устроили суматоху ради выполнения того, что уже делали раньше.
Не беспокойтесь, контейнер нам пригодится, когда добавим несколько других инструментов, помогающих передавать запросы напрямую через приложение. Эти инструменты будут использовать контейнер для загрузки правильных классов по мере необходимости.
Middleware
Если представить приложение в виде луковицы, в которой запросы идут снаружи к центру, а ответы в обратном направлении, то middleware — это каждый слой луковицы, который получает запросы, вероятно, что-то делает с ответами и передаёт их в нижний слой либо генерирует ответ и отправляет в верхний слой. Такое случается, если промежуточный слой проверяет запросы на соответствие каким-то условиям вроде запроса несуществующего пути.
Если запрос проходит до конца, приложение обработает его и превратит в ответ. После этого каждый промежуточный слой в обратном порядке будет получать ответ, возможно, модифицировать его и передавать следующему слою.
Варианты использования промежуточных слоев:
Промежуточный слой — это единственный способ реализации инструментов для обработки всех этих ситуаций? Вовсе нет. Но реализации middleware позволяют сделать цикл запрос/ответ гораздо понятнее, что сильно упростит отладку и ускорит разработку.
Мы воспользуемся промежуточным слоем для последнего сценария: маршрутизации.
Маршрутизация
Маршрутизатор применяет информацию из запроса, чтобы понять, какой класс должен его обработать (например, URI /products/purple-dress/medium должен быть обработан с помощью класса ProductDetails::class с передаваемыми в качестве аргументов purple-dress и medium ).
Наше приложение будет использовать популярный маршрутизатор FastRoute через реализацию промежуточного слоя, совместимого с PSR-15.
Диспетчер middleware
Чтобы наше приложение стало работать с каким-либо промежуточным слоем, нам понадобится диспетчер.
PSR-15 — это стандарт, определяющий интерфейсы для middleware и диспетчеров (в спецификации они называются «обработчики запросов»), обеспечивающий взаимосовместимость широкого спектра решений. Нам лишь нужно выбрать диспетчер, совместимый с PSR-15, и он будет работать с любым совместимым middleware.
В качестве диспетчера установим Relay.
А поскольку спецификация PSR-15 подразумевает, чтобы реализация промежуточного слоя передавала HTTP-сообщения, совместимые с PSR-7, мы воспользуемся Zend Diactoros.
Подготовим Relay к приёму промежуточных слоев.
Теперь добавим FastRoute и обработчика запросов ( FastRoute определяет, валиден ли запрос и может ли он быть обработан нашим приложением, а обработчик запросов передаёт запрос тому обработчику, что сконфигурирован для этого маршрута).
Теперь откройте http://localhost:8080/hello и наслаждайтесь своим успехом!
Клей, который всё скрепляет вместе
Проницательный читатель заметит, что DI-контейнер, несмотря на все трудности его конфигурирования и сборки, на самом деле ничего не делает. Диспетчер и промежуточное ПО могут работать и без контейнера.
Так зачем он нужен?
А что, если — как это почти всегда бывает в реальных приложениях — у класса HelloWorld есть зависимость?
Давайте её добавим и посмотрим, что произойдёт.
Перезагрузим браузер, и.
Это происходит потому, что для функционирования HelloWorld требуется при его создании внедрить строковое значение, а у нас это повисло в воздухе. И здесь на помощь приходит контейнер.
Давайте определим зависимость в контейнере и передадим его в RequestHandler для разрешения.
Вуаля! При перезагрузке браузера вы должны увидеть Hello, bar world!.
Правильная отправка ответов
Просто ничего с ним не делает.
Нам нужен ещё один инструмент: эмиттер. Он находится между приложением и веб-сервером (Apache, nginx и т. д.) и отправляет ваш ответ клиенту, сгенерировавшему запрос. Эмиттер просто берёт объект Response и преобразует в инструкции, доступные для понимания серверным API.
Для простоты примера мы используем здесь очень простой эмиттер. Хотя он может быть гораздо сложнее, но в случае больших загрузок реальное приложение должно быть сконфигурировано для автоматического использования потокового эмиттера. Это хорошо описано в блоге Zend.
Обновим public/index.php для получения Response от диспетчера и передачи в эмиттер.
Перезагрузим страницу — мы снова в деле! Пришло время для более надёжной обработки ответов.
В строке 15 заканчивается цикл запрос/ответ и вступает в работу веб-сервер.
Завершение
С помощью 44 строк кода и нескольких широко используемых, тщательно протестированных, надёжных, взаимодействующих друг с другом компонентов мы реализовали программу bootstrap современного PHP-приложения. Он совместим со стандартами PSR-4, PSR-7, PSR-11 и PSR-15, поэтому вам доступен широкий спектр реализаций HTTP-сообщений, DI-контейнеров, middleware и диспетчеров.
Мы углубились в некоторые технологии и аргументацию, но я надеюсь, вам очевидна простота программы начальной загрузки нового приложения без сопутствующего хлама фреймворка. Также надеюсь, что вы теперь лучше готовы к применению этих технологий в существующих приложениях.
Использованное в статье приложение лежит в репозитории, можете свободно форкать и скачивать.