- PVSM.RU - https://www.pvsm.ru -
Подборка свежих новостей и материалов из мира PHP.
Вышел PHP 8.1 RC2 и уже доступен первый пакет с использованием перечислений, будет сделан форк Magento, новый тип стандартов PER в дополнение к PSR, стартовала PhpStorm 2021.3 EAP, Symfony 6 будет полностью типизирован — как обновляться?
Для PHP 8.2 предложены новые оптимизированные структуры данных.
Также в выпуске порция инструментов, полезные статьи, видео и анонсы двух митапов.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita [1]. Если вам понравился выпуск, поставьте, пожалуйста, плюс.
Второй релиз-кандидат доставлен по расписанию. Обзоры новых фич в 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-ответов.
Обновления актуальных веток с секьюрити фиксом CVE-2021-21706 [15].
Суть бага была в том, что ZipArchive::extractTo
мог извлечь zip-архив за пределы целевого каталога при определенных именах путей к файлам на Windows.
Открытое письмо от участников сообщества Magento. В нем они объявили, что будет форк Magento, управляемый общественной организацией. Цель в том, чтобы обеспечить долгосрочную опенсорсную жизнь Magento.
Adobe анонсировали [17], что планируют декомпозицию Magento на микросервисы. Как конкретно это будет проходить — непонятно. Поэтому и будет создан форк. Он будет совместим с адоубивской Magento, до тех пор, пока та будет открытой.
Стартовала программа раннего доступа PhpStorm 2021.3. Каждую неделю публикуем новые билды, в которых можно первым пощупать новые фичи.
В релизе будет полная поддержка PHP 8.1, много улучшений для дженериков, новые опции для деплоймента, обновленный интерфейс отладчика и много другого.
PHP-FIG одобрила идею PHP Evolving Recommendations. В дополнение к PSR-стандартам теперь будут PER — это такие рекомендации, которые могут постоянно изменяться и дополняться. Например, в случае код-стайла пополнятся правилами для новых возможностей языка.
В PHP есть универсальная структура данных — массив, которую можно использовать и как обычный список, и как ассоциативный массив, и как очередь, стек и т.п.
Универсальность достигается благодаря тому, что под капотом используется хеш-таблица. Но за такую универсальность приходится платить дополнительной памятью.
В SPL есть более специализированные структуры данных, но у них багаж своих проблем.
Tyson Andre предлагает добавить новые оптимизированные реализации структур данных в PHP.
Одним из вариантов было бы добавить структуры из популярного расширения php-ds/ext-ds [20], но его автор не поддерживает эту идею. Подробности вот тут [21].
Поэтому пока есть два RFC:
Структура вектор — это набор элементов с последовательными индексами 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];
}
Deque — это двухсторонняя очередь, то есть элементы можно добавлять и удалять как в начало, так и в конец.
Использовать можно везде, где были SplQueue
или SplDoublyLinkedList
и сходу получить выигрыш в производительности, и уменьшить расход памяти.
Также Deque
актуален для долгоиграющих приложений, в которых используются большие массивы.
Реализации этих и других структур доступны в расширении TysonAndre/pecl-teds [24].
В ноябре выйдут Symfony 5.4 и 6.0. Разница между ними в том, что Symfony 5.4 по-прежнему будет содержать все устаревшие функции, а в Symfony 6.0 — все они удалены.
Кроме того, и в Symfony 5.4 и в 6.0 добавлены PHP-типы во все свойства, аргументы и возвращаемые значения методов, где возможно.
Как обновлять приложения на Symfony и его пакетах подробно описано в посте от одного из членов Symfony Core Team: Symfony 6: PHP 8 Native Types & Why we Need YOU [33].
bit
, tsvector
, citext
, inet
, cidr
.Подписывайтесь на 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
Нажмите здесь для печати.