Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Свежая подборка со ссылками на новости и материалы. В выпуске: 2 принятых, 2 отклоненных и 6 новых RFC предложений из PHP Internals, обзор PHP 8, порция полезных инструментов, онлайн мероприятия, видео, подкасты и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.4.6, PHP 7.3.18, PHP 7.2.31.
- Ближайшие мероприятия:
- Fwdays PHP online meetup — 19 мая, 19:00–21:00 UTC+3, бесплатный онлайн-митап из двух докладов на английском.
- PHP fwdays'20 online — 30 и 31 мая, уже доступна программа. Мероприятие платное, код для читателей дайджеста со скидкой 15%:
PHPDIGEST2020
. - 3-й виртуальный PHP-митап — 30 мая, с 11:00 UTC+3.
PHP Internals
- Объявлены релиз-менеджеры PHP 8 — Ими стали Sara Golemon (ex-HHVM/Hack, релиз-менеджер PHP 7.2) и Gabriel Caruso.
- [RFC] Locale-independent float to string cast — Принято предложение о приведении чисел с плавающей точкой к строке без учета локали. Вместо
3,14
будет3.14
, подробнее в канале. - [RFC] Add str_starts_with() and str_ends_with() functions — Вдогонку к str_contains() добавлены еще две функции:
str_starts_with()
иstr_ends_with()
. - [RFC] Match expression — Предложение отклонено. Одним из спорных моментов была возможность использовать блоки в выражении, однако автор считает, что без блоков пока в RFC смысла мало.
- [RFC] Guard statement — Предлагалось ввести ключевое слово
guard
для реализации, по сути, инвертированногоif
. Такая концепция есть в Swift, но из-за статической типизации там в ней больше смысла. Предложение отозвано автором. - [RFC] Conditional Return, Break, and Continue Statements — Предлагается добавить возможность вызовов вида
return if ($condition);
для раннего выхода из функций
Похожий синтаксис широко используется в Ruby, но насколько это лучшеfunction divide($dividend, $divisor = null) { return if ($divisor === null || $divisor === 0); // or return 0 if ($divisor === null || $divisor === 0); return $dividend / $divisor; }
if (condition) return;
? - [RFC] Named Arguments — В PHP 8 предлагается добавить именованные аргументы, которые позволят передавать значения в функцию на основе имени параметра, а не его позиции.
htmlspecialchars($string, double_encode: false); // вместо htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);
Подробнее в канале. - [RFC] <<Deprecated>> Attribute — Новым атрибутом предлагается маркировать устаревшие методы/функции, параметры, свойства, константы. При попытке доступа к ним будет вызвана
trigger_error()
.
Скрытый текст<?php <<Deprecated("use test2() instead")>> function test() {} class Foo { <<Deprecated>> public function test() {} public function test2(<<Deprecated>> $value) {} <<Deprecated>> public $value; <<Deprecated>> const FOO = 1; }
- [RFC] Add CMS Support — Предлагается
включить WordPress в ядро PHPдобавить несколько новых криптографических функций согласно RFC-5652. - [RFC] Make sorting stable — Стандартные функции сортировки в PHP не являются стабильными. Это значит, что оригинальный порядок элементов с одинаковыми значениями не гарантируется (пример). Предлагается это исправить и сделать сортировки
sort, rsort, usort, asort, arsort, uasort, ksort, krsort, uksort, array_multisort
стабильными. Правда, при большом количестве одинаковых элементов такой фикс отразится на производительности (бенчмарк). - [RFC] Opcache optimization without any caching — Сейчас уже есть возможность использовать опкеш без выполнения оптимизаций (
opcache.optimization_level=0
) — это может быть полезно для CLI-скриптов, когда запуск оптимизаций дольше, чем выполнение неоптимизированного кода.
А вот выполнить оптимизации без кеширования нельзя, что и предлагается реализовать. Такая возможность может быть полезна, когда запускается много долгоживущих скриптов и в условиях ограниченной памяти.
Инструменты
- kornrunner/php-blurhash — PHP-реализация алгоритма Blurhash, который позволяет получить хеш картинки и отобразить его на фронте в виде размытого изображения, пока грузится оригинальная картинка.
- gotzmann/comet — PHP-фреймворк для быстрых REST API.
- https://github.com/nikic/iter — Набор полезных функций для работы с итерируемыми типами данных на основе генераторов. Реализовано множество функций из стандартной библиотеки Python, такие как zip, range и другие. Прислал @dmitrybalabkaa.
- morris/lessql — Легковесная альтернатива ORM'кам для PHP. По сути, квери-билдер + гидратор.
- spiral/app-keeper — Админка для Spiral.
- theiconic/php-ga-measurement-protocol — Отправка данных в Google Analytics с сервера на PHP. Пример интеграции для Laravel: pascalbaljetmedia/laravel-analytics-event-tracking.
- vantoozz/proxy-scraper — Библиотека для скрапинга списков бесплатных прокси. Прислал vantoozz.
Symfony
- zenstruck/schedule-bundle — Бандл для запуска команд по графику с помощью крона для Symfony.
- fre5h/CentrifugoBundle — API-клиент для работы с вебсокет-сервером Centrifugo в Symfony.
- Как переиспользовать код с бандлами Symfony 5? Часть 6. Тестирование, Часть 7. Релизный цикл, установка и обновление.
- Неделя Symfony #698 (11-17 мая 2020)
Laravel
- laravel-frontend-presets/tall — Стек TALL = Tailwind CSS, Alpine.js, Laravel, Livewire. Перевод описания.
- Laravel 7
- О паттерне «Бекенд-для-фронта» для создания монолитов (majestic monolith).
- Мультисайт (multi-tenancy) на Laravel без дополнительных пакетов.
- Как применить TDD для команд artisan.
Async PHP
- DriftPHP: Быстрый старт.
- paphper/paper — Статический генератор сайтов, реализованный на ReactPHP.
- Интервью с Сергеем Жуком — автором книг и скринкастов по ReactPHP.
Материалы для обучения
- PHP 8 в восьми кусочках кода и подробнее в обзоре Новое в PHP 8.
- Атрибуты в PHP 8.
- В защиту фреймворков для моков — Ответ на пост о тестировании без мокинговых фреймворков.
- Ваше приложение является менеджером пакетов, а каждая фича — это зависимость.
- Быстрое переключение между PCOV и Xdebug — Расширение PCOV позволяет делать подсчет покрытия кода в разы быстрее чем Xdebug, но не может работать с ним одновременно.
- Better web sapi — О недостатках FPM sapi.
- Matthias Noback: DDD и база данных.
- История одного проекта или как я 7 лет создавал АТС на базе Asterisk и PHP.
- Проклятая старая CRM — Про переезд легаси приложения с Zend на Symfony.
Аудио/Видео
- Пятиминутка PHP № 78 — Обзор книги «Архитектура сложных веб-приложений. С примерами на Laravel».
- Между скобок №7 — Юлия Николаева (архитектор iSpring) делится советами, как писать монолитное приложение на PHP.
- PHP Russia Online — Записи стримов: оригинальный на английском, и с переводом на русский.
- PHP Internals News podcast #52 — С George Banyard о вещественных числах и локалях.
- PHP Internals News #53 — С Никитой Поповым о Constructor Property Promotion, который судя по ходу голосования таки будет принят.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 179