PHP в 2020 году
В этом посте я хочу взглянуть на яркую сторону разработки PHP. Я покажу вам, что, несмотря на многие недостатки, PHP является полезным языком для изучения
Не секрет, что среди веб-разработчиков, да и программистов и в целом: PHP имеет не лучшую репутацию. Несмотря на это, он по-прежнему является одним из наиболее часто используемых языков для создания веб-приложений. За все эти годы, PHP сумел зарекомендовать себя как язык с невысоким порогом вхождения для разработчиков, которые пишут "грязный" и небезопасный код.
Но это не отменяет того, что сегодня на PHP, можно писать чистые, поддерживаемые, быстрые и надежные приложения.
Эра PHP 5 подошла к концу, и можно оставить позади большую часть беспорядка, который был лет 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 является довольно уникальным языком: он по-прежнему позволяет вам писать полностью динамически и слабо типизированный код, но также имеет гораздо более сильную систему опциональных типов. В сочетании со статическим анализом и такими инструментами, как Psalm, Phan и PHPStan, вы можете написать защищенный, строго типизированный и статически проанализированный код.
Взгляните, например, на этот фрагмент кода PHP:
<?php
declare(strict_types=1);
final class Foo
{
public int $intProperty = 2;
public ?string $nullableString = null;
private Bar $bar;
public function __construct(Bar $bar) {
$this->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 ?? 'присваиваемое значение если null';
$value = $array['foo'] ?? "значение, если ключ не существует";
Оператор присваивания с нулевым слиянием:
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 версии большая часть ядра PHP была переписана с нуля, что привело к увеличению производительности в два-три раза. Кроме того, каждая версия 7. * оказала положительное влияние на производительность.
К счастью, есть люди, которые потратили достаточно времени на тестирование производительности версий PHP. У Кинста всегда есть обновленный список сравнения производительности старых и новых версий.
Последняя функция, связанная с производительностью, называется предварительной загрузкой (preload), которая в основном позволяет хранить скомпилированные части вашего кода PHP в памяти.
Когда выйдет PHP 8, в нашем распоряжении также окажется JIT-компилятор, обещающий интересные улучшения производительности и позволяющий войти языку PHP в новые области помимо веб-разработки.
Фреймворки и экосистема
Бытуем мнение что PHP это CMS'ки типа WordPress, Joomla и пр., но должен сказать, PHP уже давно не просто WordPress, а гораздо больше. На сегодняшний день очень популярны два основных фреймворка веб-приложений: Symfony и Laravel и несколько менее популярных: Zend Framework, Yii, CakePHP, CodeIgniter, Phalcon и т.д. - если вы хотите знать, как выглядит современная PHP-разработка, вам достаточно хорошо познакомиться с Symfony или Laravel.
Оба фреймворка имеют большую экосистему пакетов и продуктов. Начиная от административных панелей и CRM до автономных пакетов, CI для профилировщиков, многочисленных сервисов, таких как серверы веб-сокетов, менеджеры очередей, интеграции платежей; их бесчисленное множество.
В то же время, если вам нужно только управление контентом вашего сайта, то к вашим услугам все те же CMS WordPress, Drupal и Joomla.
Один из способов измерить текущее состояние экосистемы PHP - взглянуть на Packagist - основной репозиторий пакетов для PHP. Можно наблюдать экспоненциальный рост. С ±25 миллионами загрузок в день, можно сказать, что экосистема PHP - уже совсем не та слабая сторона, которой когда-то она была.
Посмотрите на этот график, в котором указано количество пакетов и версий с течением времени. Его также можно найти на веб-сайте Packagist.
Помимо обычных фреймворков и CMS, мы также можем наблюдать рост популярности асинхронных фреймворков в последние годы. Это фреймворки и серверы, написанные на PHP или других языках, которые позволяют пользователям запускать действительно асинхронный код PHP. Самые крупные игроки - это Swoole, Amp и ReactPHP.
С тех пор как мы углубились в асинхронный мир, такие вещи, как веб-сокеты и приложения с большим количеством операций ввода-вывода, стали действительно актуальными в мире PHP.
В списке внутренних рассылок также говорилось о том, чтобы добавить libuv в ядро . Для тех, кто не знает libuv: это та же библиотека, которую Node.js использует для обеспечения своей асинхронности. Кто знает, может быть PHP 8 будет той версией, добавляющей его в ядро!
Так стоит ли изучать php в 2020 году?
Надеюсь, я смог показать вам, что PHP значительно эволюционировал за последние годы, и с его помощью вы сможете писать чистый и поддерживаемый код .
Если вам интересно, как выглядит PHP-код в наши дни, вы можете проверить исходный код каких-нибудь популярных фреймворков, а также множество пакетов с открытым исходным кодом на github.
Таким образом, в то время как у языка определенно есть свои недостатки и 20-летнее наследие, я могу с уверенностью сказать, что мне нравится работать с ним.
По своему опыту я могу сказать, что на PHP можно создавать надежное, обслуживаемое и качественное программное обеспечение. Несмотря на то, что на PHP все еще возможно написать различный говно-код, я бы сказал, что это отличный выбор для веб-разработки, если его использовать правильно.
Ну и практическая сторона вопроса: на рынке труда PHP очень востребован, как во фриланс сегменте, так и в офисе. Вы точно не останетесь без работы, если будете знать синтаксис языка, а так же его слабые и сильные стороны.
Саша28.02.2023
Интересует