Как писать на PHP в 2019 году, или Путь продолжающего

На что обратить внимание в PHP в 2019 году, и как стать полноценным Middle? Рассказываем, показываем, делимся полезными ресурсами.

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

PHP по косточкам

Типы

Что нового произойдет с PHP в 2019? Не за горами следующий релиз PHP (7.4 или 8) с его типизированными свойствами, а пока можно использовать типы аргументов, которые также будут полезны в контексте больших приложений.

<?php
declare(strict_types=1);

namespace App\Entity;

class Post
{
   /** @var int $id */
   private $id;

   /** @var string $title */
   private $title;

   /**
    * @return int|null
    */
   public function getId(): ?int
   {
       return $this->id;
   }

   /**
    * @return null|string
    */
   public function getTitle(): ?string
   {
       return $this->title;
   }

   /**
    * @param string $title
    * @return Post
    */
   public function setTitle(string $title): self
   {
       $this->title = $title;

       return $this;
   }

Объявив в начале файла declare(strict_types=1), нам стал доступен контроль над типами принимаемых и возвращаемых значений, дающий большие возможности по управлению данными приложения.

Пространства имён

Языки программирования стремительно развиваются, и PHP в 2019 – не исключение.

Забудьте про require_* и include_* одних классов в другие и начинайте использовать пространства имён. Для этого скачайте пакетный менеджер Composer. Если вам будет недостаточно официальной документации, в нашем телеграм-канале вы найдёте небольшой подробный справочник по основам работы с ним.

Создайте файл composer.json и задайте определение пространства имён папкам:

"autoload": {
   "psr-4": {
       "App\\": "src/"
   }
},
"require": {}

Папка src будет корневым неймспейсом App, а вложенные папки будут именоваться в соответствие со стандартом psr-4, о котором подробнее можно прочитать на официальном сайте или же в переводе на github. Далее выполните composer install. В секции require будут находиться библиотеки, скачанные со стороны.

Теперь вместо старого доброго require

<?php
require __DIR__ . '/path/to/class1.php'
require __DIR__ . '/path/to/class2.php'
require __DIR__ . '/path/to/class3.php'
require __DIR__ . '/path/to/class4.php'

вы можете использовать удобные пространства имён:

<?php
use App\Entity\Post;
use App\Repository\PostRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
use Twig_Environment;

Именования, стандарты и прочий code style

Если вы хотите писать понятный и легко поддерживаемый код, следуйте стандартам. Это не блажь разработчиков, а прекрасная возможность регулировать работу и коммуникацию всего сообщества в целом. Подробно про существующие стандарты можно прочитать в официальной документации по PSR-2 или же в данной статье.

Объектно-ориентированное программирование на PHP

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

В этом репозитории можно найти ссылки на видео и статьи по разным компонентам ООП, среди которых интерфейсы, абстрактные классы и методы, пространства имён, основы тестирования и многое другое. После можете начать изучать популярные паттерны проектирования, о которых хорошо и подробно написано тут. Также не забываем про официальную документацию, решение всех ваших проблем.

Книги

К большому сожалению, хороших книг по языку очень мало, их почти нет. Большинство из них насыщены плохими практиками, ужасными советами и старыми, неработающими примерами кода.

PHP. Объекты, шаблоны и методики программирования

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

Domain Driven Design in PHP

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

The Clean Architecture in PHP

Являясь спагетти из паттернов проектирования, популярных технологий и архитектурных принципов, эта книга охватывает всё и сразу, поэтому многое для вас может оказаться за гранью понимания. Тем не менее, она стоит вашего прочтения, что мы вам и советуем сделать.

Instant Hands-on Testing with PHPUnit How-to

Надеемся, вы уже слышали про тестирование и про то, что это обязательная практика при разработке и поддержке крупных приложений. Это руководство не отнимет у вас много времени, но даст хорошее понимание основ использования PHPUnit.

Видео

Тут ситуация не сильно лучше, чем с книгами: авторы самых популярных каналов на Youtube пропагандируют худшие практики и совершенно не умеют писать код. Тем не менее, небольшими силами адекватных разработчиков полезные каналы имеют место быть.

Evgeniy Kuvshinov

Пусть вас не пугает маленькое число подписчиков. Автор канала рассказывает о сложных темах разработки на PHP с высоты большого опыта. Так, например, вы узнаете, как настроить Xdebug, о важности визуализации баз данных, о различных паттернах проектирования, применяемых на практике, ООП и многом другом.

Sergey Zhuk

Автор книги “ReactPHP для начинающих”, Сергей Жук, ведёт авторский канал на Youtube, где рассказывает об основах асинхронного программирования на PHP и о том, как написать быстрый парсер с помощью данной библиотеки. Советуем вам подписаться и начать следить за развитием канала.

Дмитрий Елисеев

С автором этого канала точно не соскучишься: его видео достигают отметки в шесть часов воспроизведения каждое. Тем не менее, пусть вас не пугает такой тайминг: автор каждую минуту тратит на объяснение сложных тем ООП, PSR-7, основ создания собственных фреймворков, причём делает это с уникальным качеством для русского ютуба.

Кирилл Несмеянов

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

Laracasts

Здесь вы найдёте курс по Laravel с нуля от хорошего разработчика и замечательного преподавателя Jeffry Way. Курс на Youtube охватывает версию 5.4, однако если вы хотите курс по самой новой версии, 5.7, вы его найдёте на их официальном сайте, причём полностью бесплатно.

Fwdays

Fwdays  –  это ежегодная серия технических конференций по разным направлениям, включая также PHP. Доклады касаются современных проблем в разработке, фреймворков, highload, обсуждаются также различные полезные решения крупных компаний в борьбе с производительностью и некоторыми недостатками PHP.

Symfonycasts

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

Web Practice

И под конец ещё один небольшой канал двух энтузиастов, которые в прямом эфире делали маленький youtube с помощью Laravel, Angular и тестов. Советуем подписаться и вдохновить ребят на продолжение развития канала.

Фреймворки

Тут выбор поскромнее: для крупной разработки на PHP в 2019 вы можете выбрать Laravel или Symfony, для небольшой  –  микрофреймворк Slim. Silex можно уже не брать, так как его поддержка прекратилась с выходом Symfony 4.x (напоминаем, что Silex был проектом создателей Symfony), который также может быть микрофреймворком.

Неясна ситуация с Yii2  –  он то умирает, то нет, и по-прежнему не успевает развиваться вместе с PHP,  –  поэтому не советуем его ни изучать, ни брать на проект. Если вы хотите посмотреть на готовое приложение на Symfony, на github есть хороший пример. Такое же есть и для Laravel, причём обновленное до версии 5.7, и для Slim.

Библиотеки и другие технологии

С ними вам точно повезло: количество библиотек и вспомогательных технологий по PHP просто огромное. Наш же список ограничится самыми популярными и актуальными для PHP в 2019 и последующих годах:

  • nikic/FastRoute  –  быстрый и удобный роутинг для тех, кто задумался написать собственный фреймворк;
  • danog/MadelineProto  –  библиотека для взаимодействия с Telegram без использования Bot-API;
  • webonyx/graphql-php  –  имплементация GraphQL на PHP;
  • spatie/period  –  продвинутая библиотека по сложным манипуляциям с датами;
  • reactPHP  –  технология асинхронного программирования на PHP;
  • friends-of-reactphp/mysql  –  клиент для поддержки асинхронных запросов MySQL;
  • irazasyed/telegram-bot-sdk  –  библиотека для создания ботов для Telegram. Легко интегрируется в фреймворк Laravel;
  • twigphp/Twig  –  популярный шаблонизатор для PHP приложений;
  • Doctrine  –  по-прежнему одна из самых мощных ORM с поддержкой DBAL;
  • localheinz/composer-normalize  –  забавная и, в то же время, очень полезная библиотека, которая приведёт ваши composer-файлы в порядок;
  • paragonie/easydb –  “Больше абстракций!”,  –  сказал автор библиотеки и сделал easydb, обёртку над PDO;
  • thecodingmachine/safe  –  создатели этой библиотеки пошли дальше и сделали обёртки над множеством PHP функций, которые выбрасывают исключения, а не возвращают false;
  • guzzle/guzzle  –  популярный и супер удобный HTTP клиент для PHP.

Да, это не все библиотеки и технологии, которыми гордится PHP. Больше можно посмотреть в репозитории.

Всадники апокалипсиса

И, конечно, мы не могли пройти мимо тех, чьи старания рождают только ядовитые плоды. Ниже представлен список авторов, чьи видео ни в коем разе не заслуживают просмотров (хотя противоречивая реальность поставила их на вершину топа):

  • Гоша Дударь  –  автор снимает видео по всем языкам программирования и, разумеется, знает о них примерно ничего.
  • howdy ho  –  автор серии видео “выучить <язык> за час!” и многочисленных пародий на самого себя, справедливо заслуживающих место рядом с Дударем.
  • web developer blog  –  подпишитесь и поставьте.. то есть не нужно смотреть этот канал.
  • marlin  –  плохие практики, плохая философия, плохие видео.

Все разработчики капризны и шумно жалуются о многих вещах, что хорошо и плохо одновременно. Хорошо, потому что это в какой-то мере двигает развитие дисциплины; плохо, потому что складывает несправедливое мнение и стереотипы о языках, таких как PHP, этого не заслуживающих.

А какие тренды PHP в 2019 знаете вы?

Другие материалы по теме:

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ