DevGang
Авторизоваться

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 является довольно уникальным языком: он по-прежнему позволяет вам писать полностью динамически и слабо типизированный код, но также имеет гораздо более сильную систему опциональных типов. В сочетании со статическим анализом и такими инструментами, как PsalmPhan и 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 код. Некоторые крупные игроки - это SwooleAmp и ReactPHP.

С тех пор как мы углубились в асинхронный мир, такие вещи, как веб-сокеты и приложения с большим количеством операций ввода-вывода, стали действительно актуальными в мире PHP.

Кроме того, в списке рассылки о внутреннем оборудовании говорилось о том, чтобы добавить libuv в ядро. Для тех, кто не знает о libuv: это та же библиотека, которую Node.js использует для обеспечения всей ее асинхронности. Кто знает? PHP 8 может быть версией, добавляющей его в ядро!

В заключение

Надеюсь, я смог показать вам, что PHP за последние годы значительно эволюционировал, и вы прекрасно умеете писать чистый и поддерживаемый код с его помощью.

Если вам интересно, как выглядит PHP-код в наши дни, вы можете проверить исходный код одного из моих собственных проектов, а также множество пакетов с открытым исходным кодом, которые мы лично поддерживаем.

Таким образом, в то время как у языка определенно есть свои недостатки и 20-летнее наследие, чтобы его носить с собой; Я могу с уверенностью сказать, что мне нравится работать с ним.

По своему опыту я могу создавать надежное, обслуживаемое и качественное программное обеспечение. Клиенты, на которых я работаю, довольны конечным результатом, как и я. Несмотря на то, что с PHP все еще возможно многое испортить, я бы сказал, что это отличный выбор для веб-разработки, если его использовать правильно.

Источник:

#PHP
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу