PHP в 2020 году

PHP в 2020 году

стоит ли изучать 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 очень востребован, как во фриланс сегменте, так и в офисе. Вы точно не останетесь без работы, если будете знать синтаксис языка, а так же его слабые и сильные стороны.

Сергей Мухин

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

Есть вопросы?

Я почти всегда в режиме онлайн

Связаться со мной