PHP в 2020 году
Это не секрет для веб-разработчиков и программистов в целом: PHP не имеет лучшей репутации. Несмотря на то, что он по-прежнему является одним из наиболее часто используемых языков для создания веб-приложений; За эти годы PHP сумел зарекомендовать себя как грязная кодовая база, неопытные разработчики, небезопасный код, несовместимая базовая библиотека, а что нет.
Хотя многие аргументы против PHP остаются в силе и сегодня, есть и хорошая сторона: вы можете писать чистые и поддерживаемые, быстрые и надежные приложения на PHP.
В этом посте я хочу взглянуть на эту яркую сторону разработки PHP. Я хочу показать вам, что, несмотря на многие недостатки, PHP является полезным языком для изучения. Я хочу, чтобы вы знали, что эра PHP 5 подходит к концу. Что, если вы хотите, вы можете написать современный и чистый код PHP, и оставить большую часть беспорядка, который был 10 лет назад.
Итак, давайте посмотрим, как язык изменился, даже повзрослел за последние несколько лет. Я хочу попросить вас отложить любые предубеждения всего на несколько минут и, возможно, удивиться тому, что такое PHP сегодня.
Давайте погрузимся в.
Подытожим историю
Прежде чем углубляться в детали, давайте рассмотрим, как в наши дни разрабатывается язык PHP. Сейчас мы находимся на версии 7.4, а следующей версией станет PHP 8.0 в конце 2020 года.
Начиная с поздней эры 5.*, основная команда старается поддерживать постоянный годовой цикл выпуска и преуспела в этом в течение последних четырех лет.
В целом, каждый новый выпуск активно поддерживается в течение двух лет и получает еще один год «только исправлений безопасности». Цель состоит в том, чтобы побудить разработчиков всегда быть в курсе последних новостей: небольшие обновления каждый год легче, чем, например, переход от 5,4 до 7,0.
Наконец, PHP 5.6 был последним выпуском 5.*, с следующей версией 7.0. Если вы хотите узнать, что случилось с PHP 6, вы можете прослушать этот эпизод подкаста PHP Roundtable .
Разработка PHP в настоящее время осуществляется группой добровольцев, некоторые из которых оплачиваются их работодателями, чтобы они работали над основной работой. Большая часть обсуждения того, как развивается язык, происходит в списке рассылки.
После всего этого давайте опровергнем некоторые распространенные заблуждения о современном PHP.
Система типов PHP
PHP начинал как очень слабо и динамически типизированный язык, который в то время имел свои преимущества. С тех пор, как люди начали использовать PHP для более крупных проектов, недостатки системы типов стали очевидными, и возникла необходимость в более сильной поддержке типов.
Сегодня PHP является довольно уникальным языком: он по-прежнему позволяет вам писать полностью динамически и слабо типизированный код, но также имеет гораздо более сильную систему опциональных типов. В сочетании со статическим анализом и такими инструментами, как Psalm, Phan и PHPStan, вы можете написать защищенный, строго типизированный и статически проанализированный код.
Взгляните, например, на этот фрагмент кода PHP, полностью используя его современную систему типов:
bar = $bar;
}
public function withInt(int $value): self
{
$clone = clone $this;
$clone->intProperty = $value;
return $clone;
}
public function unionTypes(int|float $input): void
{
// Union types will be added in PHP 8
}
}
По правде говоря, в системе типов PHP все еще отсутствует одна важная особенность: универсальность. Есть надежда, что они будут добавлены, но пока нет ничего конкретного. В случае типизированных массивов вам нужно полагаться на docblocks, чтобы получить надлежащую поддержку IDE:
/** @var int[] */
public array $arrayOfInts = [];
И хотя типизированные массивы являются распространенным вариантом использования обобщенных элементов, которые можно решить с помощью docblocks, мы упускаем гораздо больше функциональности, потому что их нет в языке ... пока.
Синтаксис PHP
Эра 7.* сделала много хорошего, сделав PHP более зрелым языком, когда дело доходит до синтаксиса. Чтобы проиллюстрировать это, я сделал не полный список новых вещей в PHP.
Деструктуризация массива:
[$a, $b] = $array;
Нуль коалесцирующий оператор:
$value = $object->property ?? 'fallback if null';
$value = $array['foo'] ?? "fallback if key doesn't exists";
Оператор присваивания с нулевым слиянием:
public function get(string $input): string
{
return $this->cache[$input] ??= $this->sanitize($input);
}
Распределение массива:
$a = [/* … */];
$b = [/* … */];
$mergedArray = [...$a, ...$b];
Вариадические функции:
public function get(Foo ...$foos): void
{
foreach($foos as $foo) {
// …
}
}
Аргумент распаковки:
$this->get(...$arrayOfFoo);
Типизированные свойства:
public int $intProperty;
Стрелочные функции, также называемые короткими замыканиями:
$ids = array_map(fn(Post $post): int => $post->id, $posts);
Генераторы:
function make(array $input): Generator
{
foreach ($input as $item) {
yield $this->doSomethingWith($item);
}
}
И многое другое. Я надеюсь, что из этого списка ясно, что PHP все еще развивается сегодня, и вы можете быть уверены, что есть еще что-то хорошее.
Производительность PHP
В дни версии 5* производительность PHP была… в лучшем случае средней. Однако в версии 7.0 большие части ядра PHP были переписаны с нуля, что привело к увеличению производительности в два-три раза. Кроме того, каждая версия 7.* оказала положительное влияние на производительность.
Слов не хватает, хотя. Давайте посмотрим на ориентиры. К счастью, другие люди потратили много времени на тестирование производительности PHP. Я считаю, что у Кинста хороший обновленный список.
Последняя функция, связанная с производительностью, называется предварительной загрузкой, которая в основном позволяет хранить скомпилированные части вашего PHP-кода в памяти.
Когда выйдет PHP 8, у нас также будет JIT-компилятор, обещающий интересные улучшения производительности и позволяющий PHP входить в новые области, помимо веб-разработки.
Фреймворки и экосистема
Переходя к тому, что сделано сообществом с помощью PHP. Давайте будем ясны: PHP больше не просто WordPress.
В общем, есть две основные платформы веб-приложений и несколько более мелких: Symfony и Laravel. Конечно, есть также Laminas, Yii, Cake, Code Igniter и т.д. - но если вы хотите знать, как выглядит современная PHP-разработка, вам нужно поработать с одним из первых двух.
Обе платформы имеют большую экосистему пакетов и продуктов. Начиная от административных панелей и CRM до автономных пакетов, CI для профилировщиков, многочисленных сервисов, таких как серверы веб-сокетов, менеджеры очередей, интеграции платежей; честно говоря, слишком много, чтобы перечислить.
Эти фреймворки предназначены для фактического развития; если вам нужно чистое управление контентом, такие платформы, как WordPress, CraftCMS и Statamic, улучшаются все больше и больше.
Один из способов измерить текущее состояние экосистемы PHP - взглянуть на Packagist, основной репозиторий пакетов для PHP. Он показывает экспоненциальный рост. С ±25 миллионами загрузок в день, можно сказать, что экосистема PHP - не такая слабая, какой была.
Посмотрите на этот график, перечисляющий количество пакетов и версий с течением времени. Его также можно найти на веб-сайте Packagist.
Помимо фреймворков и CMS, мы также наблюдаем рост асинхронных фреймворков в последние годы. Это среды и серверы, написанные на PHP или других языках, которые позволяют пользователям запускать действительно асинхронный PHP код. Некоторые крупные игроки - это Swoole, Amp и ReactPHP.
С тех пор как мы углубились в асинхронный мир, такие вещи, как веб-сокеты и приложения с большим количеством операций ввода-вывода, стали действительно актуальными в мире PHP.
Кроме того, в списке рассылки о внутреннем оборудовании говорилось о том, чтобы добавить libuv в ядро. Для тех, кто не знает о libuv: это та же библиотека, которую Node.js использует для обеспечения всей ее асинхронности. Кто знает? PHP 8 может быть версией, добавляющей его в ядро!
В заключение
Надеюсь, я смог показать вам, что PHP за последние годы значительно эволюционировал, и вы прекрасно умеете писать чистый и поддерживаемый код с его помощью.
Если вам интересно, как выглядит PHP-код в наши дни, вы можете проверить исходный код одного из моих собственных проектов, а также множество пакетов с открытым исходным кодом, которые мы лично поддерживаем.
Таким образом, в то время как у языка определенно есть свои недостатки и 20-летнее наследие, чтобы его носить с собой; Я могу с уверенностью сказать, что мне нравится работать с ним.
По своему опыту я могу создавать надежное, обслуживаемое и качественное программное обеспечение. Клиенты, на которых я работаю, довольны конечным результатом, как и я. Несмотря на то, что с PHP все еще возможно многое испортить, я бы сказал, что это отличный выбор для веб-разработки, если его использовать правильно.