На данный момент PHP является самым популярным языком для разработки веб-сайтов, в частности, их серверной составляющей. Статистика говорит сама за себя. В чем же причина такой популярности? Давайте попробуем разобраться.

Что можно сказать новичку о PHP в области веб-разработки или в мире программирования вообще? PHP — это, в первую очередь, серверный язык, который предназначен для обработки запросов от «клиентов» («клиентом» может быть браузер, сервер и т.д.) к серверу и отправки ответов «клиентам» (в виде HTML, JSON и т.д.) при необходимости. Кроме создания серверной части веб-приложений, есть возможность разрабатывать на PHP настольные приложения, но для меня разработка настольных приложений на PHP выглядит странно, для этой задачи лучше использовать C, C++, C# или Java, а на долю PHP оставить его специализацию — бэкенд веб-сайтов.

PHP относится к мультипарадигменным языкам, т.е. он позволяет использовать несколько подходов к разработке приложений: процедурный, объектно-ориентированный и функциональный, что дает программисту возможность подбирать подходящую парадигму под конкретную задачу или комбинировать их по мере необходимости. Кроме этого PHP построен на основе динамической (как в Perl, Python, Ruby) и слабой (как в C или JavaScript) типизации, т.е. типы переменных определяются во время работы программы и их можно приводить друг к другу. Из сказанного выше становится понятно, что PHP очень гибок и его гибкость открывает большие возможности для воплощения своих идей в жизнь. PHP, со своими особенностями, породил инфраструктуру или, лучше сказать, платформу, которая позволяет в приемлемые сроки создавать веб-приложения различного уровня сложности. В большинстве случаев малые и средние проекты, такие как блоги и небольшие интернет-магазины, «собираются» и дорабатываются на основе CMS, а средние и большие, такие как интернет-порталы, доски объявлений, корпоративные системы и т.д., создаются на основе фреймворков. Давайте подробнее рассмотрим имеющуюся инфраструктуру PHP.

ИНФРАСТРУКТУРА

1. Документация.

PHP имеет документацию переведенную на множество языков с комментариями программистов, которую можно скачать при желании. В расположении PHP-разработчика находится большое количество инструментов для решения различных задач и без документации ознакомиться со всем этим разнообразием навряд ли получится, поэтому я рекомендую прочесть всю документацию «от корки до корки» хотя бы один раз, как художественную книгу. Это позволит составить для себя общую картину о базовых возможностях языка и дополнительных модулях, которые дополняют основной функционал, например, таких как mbstring, который предназначен для работы с многобайтными строками.

2. Другие обучающие материалы.

Помимо документации, есть большое количество обучающих материалов, как текстовых, так и видео. В этом море информации легко запутаться. Чтобы этого не случилось, было создано отличное (на мой взгляд) «стандартное» руководство для обучения PHP — «PHP: правильный путь.» (версия на русском языке). Если вы только собираетесь изучать PHP, то пользуйтесь этим пособием. Из него вы узнаете множество полезной и нужной информации о PHP, действительно нужной, без «воды», которой часто заполняют различные «самоучители».

3. Стандарты написания кода — PSR.

В мире PHP существует большое количество сообществ, которые влияют на всю его инфраструктуру. Одним из самых значительных сообществ является «Группа Совместимости Фреймворков», которые предлагают стандарты для написания кода PHP. Ознакомится со всеми стандартами можно по этой ссылке. Если вам никогда не приходилось использовать стандарты кодирования, то самое время начать и стараться не прекращать :), так как они позволят писать чистый и понятный для других разработчиков код, который будет проще читать и поддерживать. Вот переводы «основных» стандартов, которыми следует пользоваться постоянно: «Основной стандарт написания кода — PSR-1» и «Руководство написания кода — PSR-2».

4. Менеджер зависимостей — Composer.

Что такое «менеджер зависимостей» и зачем он нужен? Если вкратце, то это программа, которая закачивает и подключает библиотеки и скрипты сторонних разработчиков. Например, вы хотите создать карту сайта (sitemap). Есть два варианта: первый — написать генератор самому, второй — взять готовый генератор из доступной библиотеки. Советую брать библиотеки с максимальным количеством пользователей, так можно быть уверенным, что выбранная библиотека надежна. Если вам нравится быстро и качественно решать задачи, то выбирайте второй вариант. Что для этого нужно? Вам нужно установить эту самую программу, которая будет скачивать и подключать библиотеки к вашему проекту. Эта программа называется Composer, на официальным сайте есть документация на английском и актуальная версия для скачивания, кроме этого с официального сайта composer’a можно перейти на официальное хранилище пакетов PHP — Packagist. В интернете можно найти множество массивных пособий по Composer’у, но эти пособия часто представляют из себя ведро «воды» и 10% полезной информации, хотя начинающему разработчику нужно знать только базовые вещи, которые есть на главной странице Packagist (слева в разделе «Getting Started»). Вот та «самая нужная» информация:

  1. Создайте файл composer.json в корне вашего проекта. Он будет подключать стандартный автозагрузчик классов (исходники будем хранить в директории “src” и для этого укажем “App\\”:”src”) и библиотеку “samdark/sitemap” для генерации карты сайта.
  2. Выполните команду загрузки пакетов — «composer install» в корневой директории проекта;
  3. Подключите файл автозагрузки библиотек из composer’a вот так (ниже будет показано где этот код прописать):

Практически все фреймворки имеют встроенную автозагрузку классов и при работе с ними 3-й пункт можно пропустить.

После выполнения команды «composer install», composer загрузит все нужные библиотеки. У меня эта команда выглядит так (для тестовых разработок использую OpenServer, о нем речь пойдет в других статьях), но, в зависимости от системы, она может отличаться. После выполнения этой команды в директории проекта должна появится еще одна — «vendor», в которой и будут находиться все запрошенные библиотеки.

После того как мы скачали библиотеку через composer нам нужно её использовать. Создайте новую директорию “src” (её мы указали в файле compser.json) и уже в неё добавьте новый файл index.php с таким содержимым:

После того как вы запустите скрипт (через командную строку — «php index.php» или через браузер) в директории должен появиться файл «sitemap.xml» с двумя записями. Это пример того, что большинство типичных задач можно решить через готовые компоненты за очень короткое время по сравнению с разработкой «с нуля».

В хранилище библиотек Packagist находится множество готовых решений, которые написаны и опробованы другими разработчиками. Представляете какие это открывает возможности для реализации проектов? За несколько минут вы можете найти готовое решение и спокойно использовать, попробуйте в поисковой форме packagist.org (она находится в «шапке» сайта) ввести «sitemap», «chat», «rss» и посмотреть что будет. Рассказывать о composer’е можно долго, но пора переходить к другим частям инфраструктуры PHP.

5. Тестирование.

Тестирование — это одна из важных частей крупных и высоконагруженных проектов. В PHP есть несколько библиотек для тестирования, но здесь укажу только одну,  самую популярную и актуальную на данный момент — Codeception.

Написание тестов позволит сократить вероятность наличия ошибок в системе и не допустить внесения новых в те места, которые покрыты тестами.

6. CMS.

На PHP написано большое количество готовых решений (CMS) для «типичных» задач: сайтов-визиток, блогов, различных каталогов и интернет-магазинов. Среди CMS, конечно, есть лидеры по популярности (проценты указаны приблизительные):

Большой выбор CMS является важной частью инфраструктуры PHP, с их помощью можно реализовать полноценный интернет-ресурс в кротчайшие сроки, причем с минимальными трудозатратами. Например, этот блог был создан всего за час работы:

  • установлен WordPress;
  • выбран простой дизайн для удобного чтения из множества доступных вариантов;
  • добавлены плагины для защиты от спама, генерации карты сайта, кеширования и сео продвижения.

Все популярные CMS, как правило, имеют большое количество плагинов, которые расширят функциональность сайта до необходимых пределов. А если требуемый функционал не удалось добавить через плагин, что бывает довольно редко, то можно обратиться за помощью к фрилансерам или веб-студиям.

7. Фреймворки.

На данный момент, как мне это видится, большинство крупных и «уникальных» PHP-приложений создается на основе фреймворков — готовых каркасов для работы. Выбор этих каркасов на PHP реально огромен, их десятки, но, как обычно, лидеров выделить достаточно просто, на них и остановимся. Для удобства я разделю их на две категории: для быстрой разработки (RAD) и «энтерпрайз» разработки. Это деление весьма условно, ведь архитектура проекта всегда зависит от архитектора, а не от используемого фреймворка.

Быстрая разработка:

«Энтерпрайз» разработка:

  • Zend — фреймворк от компании Zend Technologies, которая занимается разработкой ядра PHP, что уже подразумевает серьезность подхода к данному продукту. Официальный сайт.
  • Symfony — еще один фреймворк для разработки крупных приложений, как и Zend нацелен на использование лучших практик разработки. Официальный сайт.

По своему опыту использования фреймворков (> 5 лет) могу сказать, что чтобы научиться продуктивнее использовать Yii и Laravel стоит написать хотя бы один средний проект (интернет-магазин или доску объявлений) на Symfony или Zend.

8. Среды разработки (IDE).

Список редакторов для PHP довольно большой и на первый взгляд выбрать подходящий сложно, но среди них есть несколько лидеров -тяжеловесов:

Если вас не утроят полнофункциональные IDE, то можете обратиться к легковесному редактору наподобие Sublime Text.

9. Сообщество.

Сообщество PHP насчитывает большое количество участников. При возникновении проблем и вопросов по разработке на PHP найти ответ не составляет труда. Для удобства я разделю сообщества рунета на общие (все вопросы по PHP и смежным темам) и тематические (обсуждение конкретных CMS и фреймворков), так будет проще сориентироваться. Вот несколько сообществ PHP из рунета:

Общие:

Сообщества для популярных CMS в СНГ:

Сообщества популярных фреймворков в СНГ:

Практически для каждого популярного фреймворка или системы управления контентом можно найти свой форум или чат.

Минусы PHP

В процессе написания этой статьи я решил пробежаться по форумам и блогам для сбора минусов PHP. Первая и большая часть из собранных минусов выглядит странно, а со второй можно смело соглашаться. Начнем с первой, вот краткий, обобщенный и немного утрированный список найденных «претензий»:

  • PHP не является копией C/C++/JAVA/любой_другой язык поэтому он плохой;
  • на PHP можно написать только «Hello world!», остальное он просто не потянет;
  • на PHP нет ООП, поэтому он плохой;
  • на PHP есть ООП, а скриптовому языку он не нужен;
  • нет статической типизации, поэтому язык совсем плохой;
  • PHP это язык без типов;
  • и т.д. и т.п.

Скорее всего, подобного качества критика звучит от несведущих людей, имеющих малый опыт работы с PHP или вообще без наличия такового.  Большинство «претензий» основано на информации 5-ти, 10-ти, а то и 15-ти летней давности, а также на негативном отношении к динамической типизации. Хотя динамическая типизация это не недостаток, а особенность языка, имеющая свои сильные и слабые стороны.

Перейдем ко второй части минусов PHP:

  • не всегда очевидное преобразование типов переменных, оно может показаться странным для новичка в PHP (рекомендую прочесть «Приведение типов в PHP == табурет о двух ножках?» желательно с комментариями пользователей хабра), в некоторых случаях подобные особенности языка могут породить проблемы, если о них не знать;
  • наличие противоречий в стандартной библиотеке связанных с наименованием функций и возвращаемых ими значений.

В списке выше должен быть еще один серьезный пункт, но его исправили в седьмой версии языка — работа с ошибками.

ЗАКЛЮЧЕНИЕ

PHP, в настоящее время, переживает вторую молодость: выходят обновления языка (PHP 7.0PHP 7.1, PHP 7.2, PHP 7.3) , появился приятный менеджер пакетов (composer) с библиотекой готовых решений и, плюс к этому, активно развиваются и конкурируют между собой фреймворки. Это позволяет сделать вывод о том, что PHP-разработчики будут пользоваться спросом еще долго, а количество проектов на нем продолжит расти.

P.S.

Несколько интересных статей по теме:

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