PHP как платформа веб-разработки

На данный момент 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 (php-fig.org/psr). Если вам никогда не приходилось использовать стандарты кодирования, то самое время начать и стараться не прекращать :), так как они позволят писать чистый и понятный для других разработчиков код, который будет проще читать и поддерживать. Вот переводы «основных» стандартов, которыми следует пользоваться постоянно: «Основной стандарт написания кода — PSR-1» и «Руководство написания кода — PSR-2».

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

Что такое «менеджер зависимостей» и зачем он нужен? Если вкратце, то это программа, которая закачивает, подключает и проверяет на совместимость библиотеки сторонних разработчиков. Например, вы хотите создать карту сайта (sitemap). Есть два варианта: первый — написать генератор самому, второй — взять готовый генератор из доступной библиотеки.

Советую брать библиотеки с максимальным количеством пользователей, так вы будете уверены, что выбранная библиотека надежна.

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

  • Создайте файл composer.json в корне вашего проекта. Он будет подключать стандартный автозагрузчик классов (исходники будем хранить в директории “src” и для этого укажем “App\”:”src”) и библиотеку “samdark/sitemap” для генерации карты сайта. Содержимое этого файла:
{
    "autoload": {
        "psr-4": {
            "App\\":"src"
        }
    },
    "require": {
        "samdark/sitemap": "*"
    }
}
  • Выполните команду загрузки пакетов — «composer install» в корневой директории проекта;
  • Подключите файл автозагрузки библиотек из composer’a вот так (ниже будет показано где этот код прописать):
<?php
 
require 'vendor/autoload.php';
 
// ...

После выполнения команды «composer install» composer создаст директорию «vendor» и загрузит в неё все нужные библиотеки.

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

<?php
 
// Подключаем автозагрузчик классов от composer'a.
require 'vendor/autoload.php';
 
// Создадим карту сайта через подгруженную библиотеку и добавим в неё пару записей.
$sitemap = new \samdark\sitemap\Sitemap(__DIR__ . '/sitemap.xml');
$sitemap->addItem('https://my-site.ru/page_first');
$sitemap->addItem('https://my-site.ru/page_second');
$sitemap->write();

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

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

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

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

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

6. CMS.

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

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

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

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

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

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

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

Корпоративная (enterprise) разработка:

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

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

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

Список 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.

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

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