- PVSM.RU - https://www.pvsm.ru -

PHP Дайджест № 212 (13 – 27 сентября 2021)

PHP Дайджест № 212 (13 – 27 сентября 2021) - 1

Подборка свежих новостей и материалов из мира PHP.

Вышел PHP 8.1 RC2 и уже доступен первый пакет с использованием перечислений, будет сделан форк Magento, новый тип стандартов PER в дополнение к PSR, стартовала PhpStorm 2021.3 EAP, Symfony 6 будет полностью типизирован — как обновляться?

Для PHP 8.2 предложены новые оптимизированные структуры данных.

Также в выпуске порция инструментов, полезные статьи, видео и анонсы двух митапов.

Приятного чтения!

Этот дайджест подготовлен совместно с Insolita [1]. Если вам понравился выпуск, поставьте, пожалуйста, плюс.

PHP Дайджест № 212 (13 – 27 сентября 2021) - 2 Новости

  • PHP 8.1 RC 2

    Второй релиз-кандидат доставлен по расписанию. Обзоры новых фич в PHP 8.1 можно посмотреть в постах What's new in PHP 8.1 [2] и PHP 8.1: before and after [3] и на PHP.Watch [4].

    Также уже доступно руководство по миграции на PHP 8.1 [5].

    Пара свежих переводов:

    Попробовать PHP 8.1 можно из докера [8], например, php:8.1-rc-cli, на маке через homebrew [9], или просто поклацать на 3v4l.org [10].

    Уже появился первый пакет с использованием перечислений из PHP 8.1!
    alexanderpas/php-http-enum [11] — Енамы со статус-кодами и текстами сообщений HTTP-ответов.

  • PHP 8.0.11 [12], 7.4.24 [13] и 7.3.31 [14]

    Обновления актуальных веток с секьюрити фиксом CVE-2021-21706 [15].

    Суть бага была в том, что ZipArchive::extractTo мог извлечь zip-архив за пределы целевого каталога при определенных именах путей к файлам на Windows.

  • The Future of Magento [16]

    Открытое письмо от участников сообщества Magento. В нем они объявили, что будет форк Magento, управляемый общественной организацией. Цель в том, чтобы обеспечить долгосрочную опенсорсную жизнь Magento.

    Adobe анонсировали [17], что планируют декомпозицию Magento на микросервисы. Как конкретно это будет проходить — непонятно. Поэтому и будет создан форк. Он будет совместим с адоубивской Magento, до тех пор, пока та будет открытой.

  • PhpStorm 2021.3 Early Access Program Is Open [18]

    Стартовала программа раннего доступа PhpStorm 2021.3. Каждую неделю публикуем новые билды, в которых можно первым пощупать новые фичи.

    В релизе будет полная поддержка PHP 8.1, много улучшений для дженериков, новые опции для деплоймента, обновленный интерфейс отладчика и много другого.

  • PER Workflow — PHP-FIG [19]

    PHP-FIG одобрила идею PHP Evolving Recommendations. В дополнение к PSR-стандартам теперь будут PER — это такие рекомендации, которые могут постоянно изменяться и дополняться. Например, в случае код-стайла пополнятся правилами для новых возможностей языка.

PHP Дайджест № 212 (13 – 27 сентября 2021) - 5 PHP Internals

  • Новые структуры данных в PHP

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

    Универсальность достигается благодаря тому, что под капотом используется хеш-таблица. Но за такую универсальность приходится платить дополнительной памятью.

    В SPL есть более специализированные структуры данных, но у них багаж своих проблем.

    Tyson Andre предлагает добавить новые оптимизированные реализации структур данных в PHP.

    Одним из вариантов было бы добавить структуры из популярного расширения php-ds/ext-ds [20], но его автор не поддерживает эту идею. Подробности вот тут [21].

    Поэтому пока есть два RFC:

    • [RFC] final class Vector [22]

      Структура вектор — это набор элементов с последовательными индексами 0, 1, 2 и т.д. Памяти требует в два раза меньше, чем текущие массивы и работает быстрее структур из SPL.

      В плане API это обычный класс с реализацией интерфейсов ArrayAccess, IteratorAggregate и Countable.

      $values = new Vector();
      for ($i = 0; $i < $n; $i++) {
          $values[] = $i;
      }
      
      for ($i = 0; $i < $n; $i++) {
          echo $values[$i];
      }
      
    • [RFC] final class Deque [23]

      Deque — это двухсторонняя очередь, то есть элементы можно добавлять и удалять как в начало, так и в конец.

      Использовать можно везде, где были SplQueue или SplDoublyLinkedList и сходу получить выигрыш в производительности, и уменьшить расход памяти.

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

    Реализации этих и других структур доступны в расширении TysonAndre/pecl-teds [24].

PHP Дайджест № 212 (13 – 27 сентября 2021) - 6 Инструменты

  • mrsuh/php-generics [25] — Ещё одна попытка реализации дженериков на PHP. Интересная статья от автора в поддержку: PHP Generics. Right here. Right now [26]
  • spiral/roadrunner 2.4 [27] — Большое обновление сервера приложений для PHP на Golang. В релизе: поддержка очередей, key-value хранилищ, интеграция с Temporal. Подробности [28].
  • dwgebler/doclite [29] — NoSql хранилище на PHP (На базе SQLite)
  • vjik/codeception-db-populator [30] — Модуль для Codeception, позволяющий загружать только необходимые таблицы и данные для текущего теста. Ускоряет выполнение тестов и повышает удобство подготовки данных для них.
  • brick/date-time [31] — Пакет с набором иммутабельных классов для работы с датой и временем.

PHP Дайджест № 212 (13 – 27 сентября 2021) - 7 Symfony

PHP Дайджест № 212 (13 – 27 сентября 2021) - 8 Laravel

PHP Дайджест № 212 (13 – 27 сентября 2021) - 9 Статьи

PHP Дайджест № 212 (13 – 27 сентября 2021) - 15 Аудио/Видео

community Сообщество


Подписывайтесь на Telegram-канал PHP Digest [63].

Этот дайджест подготовлен совместно с Insolita [1]. Если вам понравился выпуск, поставьте, пожалуйста, ему плюс.

Заметили ошибку или опечатку? Сообщите в личку хабра [64] или телеграм [65].

Прислать ссылку можно через форму [66] или просто написав мне в телеграм [65].
Поиск ссылок по всем дайджестам [67]
Предыдущий выпуск: PHP-Дайджест № 211 [68]

Автор: Роман Пронский

Источник [69]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/368227

Ссылки в тексте:

[1] Insolita: https://twitter.com/DonnaInsolita

[2] What's new in PHP 8.1: https://stitcher.io/blog/new-in-php-81

[3] PHP 8.1: before and after: https://stitcher.io/blog/php-81-before-and-after

[4] на PHP.Watch: https://php.watch/versions/8.1

[5] руководство по миграции на PHP 8.1: https://www.php.net/manual/ru/migration81.php

[6] Перечисления в PHP 8.1 : https://habr.com/ru/post/570508/

[7] Readonly-свойства в PHP 8.1: https://habr.com/ru/post/578800/

[8] докера: https://hub.docker.com/_/php?tab=tags&name=8.1&page=1&ordering=last_updated

[9] через homebrew: https://nunomaduro.com/how-to-install-php-8-1-rc-on-mac/

[10] 3v4l.org: https://3v4l.org/#v8.1rc2

[11] alexanderpas/php-http-enum: https://github.com/alexanderpas/php-http-enum

[12] PHP 8.0.11: https://www.php.net/ChangeLog-8.php#8.0.11

[13] 7.4.24: https://www.php.net/ChangeLog-7.php#7.4.24

[14] 7.3.31: https://www.php.net/ChangeLog-7.php#7.3.31

[15] CVE-2021-21706: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-21706

[16] The Future of Magento: https://www.mage-os.community/blog/the-future-of-magento

[17] анонсировали: https://business.adobe.com/summit/2021/sessions/extending-magento-commerce-with-adobe-io-s604.html

[18] PhpStorm 2021.3 Early Access Program Is Open: https://blog.jetbrains.com/phpstorm/2021/09/phpstorm-2021-3-early-access-program-is-open/

[19] PER Workflow — PHP-FIG: https://www.php-fig.org/bylaws/per-workflow/

[20] php-ds/ext-ds: https://github.com/php-ds/ext-ds

[21] тут: https://github.com/php-ds/ext-ds/issues/156#issuecomment-926674138

[22] [RFC] final class Vector: https://wiki.php.net/rfc/vector

[23] [RFC] final class Deque: https://wiki.php.net/rfc/deque

[24] TysonAndre/pecl-teds: https://github.com/TysonAndre/pecl-teds

[25] mrsuh/php-generics: https://github.com/mrsuh/php-generics

[26] PHP Generics. Right here. Right now: https://habr.com/ru/post/577750/

[27] spiral/roadrunner 2.4: https://github.com/spiral/roadrunner

[28] Подробности: https://spiralscout.com/blog/roadrunner-2-4-0

[29] dwgebler/doclite: https://github.com/dwgebler/doclite

[30] vjik/codeception-db-populator: https://github.com/vjik/codeception-db-populator

[31] brick/date-time: https://github.com/brick/date-time

[32] Подготовка ваших приложений и пакетов для Symfony 6: https://symfony.com/blog/preparing-your-apps-and-bundles-for-symfony-6

[33] Symfony 6: PHP 8 Native Types & Why we Need YOU: https://wouterj.nl/2021/09/symfony-6-native-typing

[34] больше не нужен будет flex.symfony.com: https://symfony.com/blog/symfony-flex-is-going-serverless

[35] github.com/symfony/recipes: https://github.com/symfony/recipes/tree/flex/main

[36] Livewire: https://github.com/livewire/livewire

[37] Описание изменений: https://laravel-news.com/livewire-v2-6-0

[38] Видеообзор от канала CutCode: https://www.youtube.com/watch?v=jRxklBj_hf8

[39] mateusjunges/laravel-kafka: https://github.com/mateusjunges/laravel-kafka

[40] tpetry/laravel-postgresql-enhanced: https://github.com/tpetry/laravel-postgresql-enhanced

[41] Про работу с фикстурами в тестах: https://dyrynda.com.au/blog/working-with-test-fixtures

[42] Стратегии уменьшения количества запросов в приложении Laravel: https://freek.dev/2075-strategies-for-decreasing-the-number-of-queries-in-a-laravel-app

[43] Один класс — один тест?: https://matthiasnoback.nl/2021/09/quick-testing-tips-one-test-per-class/

[44] Тестировать что угодно лучше, чем ничего не тестировать?: https://matthiasnoback.nl/2021/09/testing-anything-better-than-testing-nothing/

[45] Пишите юнит-тесты как сценарии: https://matthiasnoback.nl/2021/09/write-unit-tests-like-scenarios/

[46] Что происходит, когда мы клонируем объекты в PHP?: https://doeken.org/blog/what-happens-when-we-clone

[47] Про структуру данных Either: https://marcosh.github.io/post/2021/09/24/either-why-or-how.html

[48] Про создание типа `Option` на PHP: https://ryangjchandler.co.uk/posts/creating-an-option-type-in-php

[49] Версионирование API или единая кодовая база для всех версий: https://habr.com/ru/company/superjob/blog/577650/

[50] Сравнение инструментов для генерации thumbnails:: https://habr.com/ru/post/578282/

[51] Видишь уязвимости? А они есть! Наше исследование популярных CMS-систем: https://habr.com/ru/company/solarsecurity/blog/579854/

[52] Ускорение сайта путём выявления проблемных участков кода: Xdebug + PhpStorm: https://habr.com/ru/post/579434/

[53] Локальная разработка пакетов (Сomposer + PhpStorm): https://t.me/beerphp/80

[54] Beer::PHP 🍺: https://t.me/beerphp

[55] Серия роликов об устройстве Xdebug 3: https://www.youtube.com/playlist?list=PLg9Kjjye-m1g_eXpdaifUqLqALLqZqKd4

[56] Запуск видеокурса, который заставил меня снова поверить в себя: https://christoph-rumpel.com/2021/9/the-video-course-launch-that-made-me-belive-in-myself-again

[57] masteringphpstorm.com: https://masteringphpstorm.com/

[58] PHP Самара: https://www.youtube.com/channel/UC3B2K4xFRSKIbq7ke0ki-tQ

[59] Митап: Производительность бэкенда: https://manychat.timepad.ru/event/1769922/

[60] Митап: Как выжить при быстром росте: https://lu.ma/rapid-growth

[61] Podlodka: https://www.youtube.com/channel/UCOei1E1Vqq10S913OEqTWGw

[62] phpcommunity.ru: https://phpcommunity.ru/

[63] PHP Digest: https://t.me/phpdigest

[64] личку хабра: https://habrahabr.ru/conversations/pronskiy/

[65] телеграм: https://t.me/pronskiy

[66] через форму: https://bit.ly/php-digest-add-link

[67] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/

[68] Предыдущий выпуск: PHP-Дайджест № 211: https://habr.com/ru/post/577660/

[69] Источник: https://habr.com/ru/post/580210/?utm_source=habrahabr&utm_medium=rss&utm_campaign=580210