На данный момент 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, конечно, есть лидеры по популярности (проценты указаны приблизительные):
- WordPress — 40% рынка;
- Joomla — 20% рынка;
- 1С-Битрикс — 10% рынка;
- MODx — 5% рынка;
- Drupal — 5% рынка;
- OpenCart — 5% рынка.
- другие CMS.
Большой выбор CMS является важной частью инфраструктуры PHP. С их помощью создаются полноценные проекты в кротчайшие сроки, причем, с минимальными трудозатратами. Например, этот блог был создан всего за час работы:
- установлен WordPress;
- выбран простой дизайн для удобного чтения из множества доступных вариантов;
- добавлены плагины для защиты от спама, генерации карты сайта, кеширования и сео продвижения.
Все популярные CMS, как правило, имеют большое количество плагинов, которые расширят функциональность сайта до необходимых пределов. А если требуемый функционал не удалось добавить через плагин, что бывает довольно редко, то можно обратиться за помощью к фрилансерам или веб-студиям.
7. Фреймворки.
На данный момент, как мне это видится, большинство крупных и «уникальных» PHP-приложений создается на основе фреймворков — готовых каркасов для работы. Выбор этих каркасов на PHP реально огромен, их десятки, но, как обычно, лидеров выделить достаточно просто, на них и остановимся. Для удобства разделю их на две категории: для быстрой (RAD) и корпоративной (enterprise) разработки. Это деление весьма условно, ведь архитектура проекта всегда зависит от архитектора, а не от используемого фреймворка.
Быстрая (RAD) разработка:
- Laravel — самый популярный PHP-фреймворк в мире на данный момент. Официальный сайт и русскоязычное сообщество.
- Yii — самый популярный фреймворк на постсоветском пространстве. Официальный сайт и русскоязычное сообщество.
Корпоративная (enterprise) разработка:
- Zend — фреймворк от компании Zend Technologies, которая занимается разработкой ядра PHP, что уже подразумевает серьезность подхода к данному продукту. Официальный сайт.
- Symfony — еще один фреймворк для разработки крупных приложений, как и Zend нацелен на использование лучших практик разработки. Официальный сайт.
По своему опыту использования фреймворков (> 5 лет) могу сказать, чтобы научиться продуктивнее использовать Yii и Laravel стоит написать хотя бы один средний проект (интернет-магазин или доску объявлений) на Symfony или Zend.
8. Среды разработки (IDE).
Список IDE для PHP довольно большой и на первый взгляд выбрать подходящий сложно, но среди них есть несколько лидеров-тяжеловесов:
- PHPStorm — одна из лучше IDE для PHP. На официальном сайте вы найдете исчерпывающее руководство и ссылку на скачивание. Для ознакомления с функционалом стоит почитать: «Продуктивное использование PHPStorm«, «PhpStorm — повышаем производительность (клавиатурные сокращения). Часть 1» и «PhpStorm — повышаем производительность (клавиатурные сокращения). Часть 2«. Данная среда платная — около 200$ в год.
- NetBeans — бесплатная и приятная IDE для PHP, но, на мой взгляд, менее удобная чем PHPStorm. На официальном сайте вы также найдете ссылку для скачивания и документацию. Для ознакомления стоит прочесть «Хитрости и трюки Netbeans на живых примерах«.
- Zend Studio — еще один серьезный продукт для разработки на PHP. Страница IDE на официальном сайте. Данная среда платная — около 90$ в год.
Если вас не утроят полнофункциональные IDE, то можете обратиться к легковесному редактору наподобие Sublime Text.
9. Сообщество.
Сообщество PHP насчитывает большое количество участников. При возникновении проблем и вопросов по разработке на PHP найти ответ не составляет труда. Для удобства, разделю сообщества рунета на общие (все вопросы по PHP и смежным темам) и тематические (обсуждение конкретных CMS и фреймворков), так будет проще сориентироваться. Вот несколько сообществ PHP из рунета:
Общие:
Сообщества для популярных CMS в СНГ:
- Официальное сообщество WordPress;
- Сообщество Drupal на русском;
- Сообщество Joomla русском;
- ModX.RU и ModX.PRO;
- Официальное русское сообщество OpenCart и форум для русскоязычных пользователей.
Сообщества популярных фреймворков в СНГ:
Практически у каждого популярного фреймворка или системы управления контентом есть свой форум или чат.
Минусы PHP
В процессе написания этой статьи я решил пробежаться по форумам и блогам для сбора минусов PHP. Первая и большая часть из собранных минусов выглядит странно, а со второй можно смело соглашаться. Начнем с первой, вот краткий, обобщенный и немного утрированный список найденных «претензий»:
- PHP не является копией C/C++/JAVA/любой_другой язык поэтому он плохой;
- на PHP можно написать только «Hello world!», остальное он просто не потянет;
- на PHP нет ООП, поэтому он плохой;
- на PHP есть ООП, а скриптовому языку он не нужен;
- нет статической типизации, поэтому язык совсем плохой;
- PHP это язык без типов;
- и т.д. и т.п.
Скорее всего, подобного качества критика звучит от несведущих людей, имеющих малый опыт работы с PHP или вообще без наличия такового. Большинство «претензий» основано на информации 5-ти, 10-ти, а то и 15-ти летней давности, а также на негативном отношении к динамической типизации. Хотя динамическая типизация это не недостаток, а особенность языка, имеющая свои сильные и слабые стороны.
Перейдем ко второй части минусов PHP:
- не всегда очевидное преобразование типов переменных, оно может показаться странным для новичка в PHP (рекомендую прочесть «Приведение типов в PHP == табурет о двух ножках?» желательно с комментариями пользователей хабра), в некоторых случаях подобные особенности языка могут породить проблемы, если о них не знать;
- наличие противоречий в стандартной библиотеке связанных с наименованием функций и возвращаемых ими значений.
В списке выше должен быть еще один серьезный пункт, но его исправили в седьмой версии языка — работа с ошибками.
ЗАКЛЮЧЕНИЕ
PHP, в настоящее время, переживает вторую молодость: выходят обновления языка (PHP 7.0, PHP 7.1, PHP 7.2, PHP 7.3) , появился приятный менеджер пакетов (composer) с библиотекой готовых решений и, плюс к этому, активно развиваются и конкурируют между собой фреймворки. Это позволяет сделать вывод о том, что PHP-разработчики будут пользоваться спросом еще долго, а количество проектов на нем продолжит расти.
P.S.
Несколько интересных статей по теме:
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.