Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4, PhpStorm 2019.3, InfectionPHP и другие релизы, статистика версий PHP, об использовании FFI, видео с прошедших конференций и митапов, порция полезных инструментов, и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.4.0 — Долгожданный релиз интерпретатора доставлен строго по расписанию. Спасибо всем контрибьюторам и релиз-менеджерам Derick Rethans и Peter Kokot за проделанную работу! Из нового:
• Типизированные свойства
• Стрелочные функции
• Ограниченная ковариация возвращаемого типа и контравариантность типа аргумента
• Присваивающий оператор объединения с null (??)
• Распаковка внутри массивов
• Разделитель в числовых литералах
• Обработка исключений из метода __toString()
• Предзагрузка OPcache
• FFI — Все что вы хотели знать про PHP 7.4 FFI
• Пачка возможностей переведены в разряд устаревших, а также есть изменения, ломающие обратную совместимость.
• Полный список изменений в документе php-src/UPGRADING
Как Badoo переходит на PHP 7.4.
Судя по бенчмаркам, производительность без учёта предзагрузки увеличилась в среднем на ~11%.
С выходом 7.4 закончился период поддержки PHP 7.1, а PHP 7.2 перешёл в режим только секьюрити фиксов. Самое время обновиться: Как установить PHP 7.4 на различных ОС.
- PHP Internals News #37 – PHP 7.4 Celebrations! — Разработчики рассказывают о своих любимых фичах из PHP 7.4.
- PhpStorm 2019.3 — Поддержка PHP 7.4, PSR-12, WSL, MongoDB и многое другое. Видеообзор основных изменений.
- Drupal 8.8.0 — Кроме прочего, в релизе добавлена нативная поддержка Composer.
- Статистика версий PHP – 2019.2 — Традиционная подборка статистики использования версий PHP на основе данных, которые отправляет Composer при подключении к packagist.org. Новые версии принимаются сообществом быстро, у PHP 7.3 доля 35.24%, а PHP 5 медленно отмирает и занимает 9%.
- skyeng/php-communities — Открытый список PHP-событий, спикеров и организаторов. Ближайшие мероприятия:
• 10 декабря, Одесса: PHP OpenSource world. Stable multi-threaded application.
• 12 декабря, Москва: Открытый микрофон: backend. Badoo приглашает спикеров
• 14 декабря, Казань: Большая встреча PHP-разработчиков
• 18 декабря, Санкт-Петербург: SymСode St. Petersburg Meetup #8 @ JetBrains
• 21 декабря, Нижний Новгород: Второй митап сообщества PHP NN
Инструменты
- Infection 0.15.0 — Обновление инструмента для мутационного тестирования в PHP. В новой версии: Поддержка Codeception, PHP 7.4, Symfony 4.4 и 5.0, пара новых мутаторов и другое.
- clue/phar-composer — Инструмент для создания phar-архива из любого проекта на основе Composer. Пост в поддержку.
- phplrt/phplrt — Инструмент для создания парсеров на PHP по заданной грамматике. Пример: парсер json5.
- shivammathur/setup-php — GitHub action для добавления в свой воркфлоу, который подготовит среду PHP для дальнейших шагов.
- vlucas/phpdotenv V4.0 — Автоматическая загрузка переменных окружения из файла .env.
- totten/pogo — Инструмент позволяет писать однофайловые скрипты, указывая Composer-зависимости непосредственно в PHP-файле. Идея уже была реализована в sensiolabs/melody.
- PHPStan 0.12 — Статический анализатор для PHP в новой версии с поддержкой дженериков через PHPDoc аннотации.
Symfony
- Неделя Symfony #675 (2 — 8 декабря 2019)
- Предзагрузка PHP 7.4 в Symfony 4.4
- Логгирование изменений сущностей в Symfony 4
- Как создать RESTful API на Symfony 5 + API Platform для проекта на MODX
- Пятиминутка PHP № 72 — С Валентином Удальцовым про SymfonyCon 2019, про обработку событий предметной области (Domain Events), про компоненты Messenger, Mailer и про планы дальнейшего развития Symfony 5. И продолжение в выпуске № 73 о SymfonyCloud, надёжной доставке сообщений, статическом анализе PHP кода.
Laravel
- Об использовании View model — Новая глава из серии Laravel beyond CRUD.
- Кейс и рекомендации по переносу приложения на Laravel Vapor
- Streamlining Laravel — Несколько идей по улучшению Laravel.
- Form Requests — больше, чем валидация — Перевод.
- Astrocasts — Делаем командную шину на Laravel и Tactician 2.x
Yii
- hunwalk/yii2-basic-firestarter — Модифицированная версия базового шаблона с предварительно настроенными функциями для быстрого старта проекта.
- Минимальной версией интерпретатора для Yii 3 будет PHP 7.4
Zend
- Новости о Laminas — Проект Apigility будет переименован в Laminas API Tools (неймспейс
Laminas\ApiTools
), а Expressive будет называться Mezzio. Официальный релиз Laminas запланирован на январь 2020.
Async PHP
Материалы для обучения
- Бенчмарк 4 способов генерирования UUID в PHP — Сравнение PECL расширения uuid, свежего полифила расширения symfony/polyfill-uuid, популярного пакета ramsey/uuid и биндинга libuuid через FFI jolicode/ffi-uuid.
- 4 ключевых момента при запуске PHP приложений на нескольких серверах — И подкаст The Undercover ElePHPant #3 с Larry Garfield и Robert Douglass.
- Уроки, извлечённые из тестирования и рефакторинга легаси-проектов
- Как узнать, равны ли два float в PHP
- Анонимные функции в PHP: сеанс чёрной магии с разоблачением
- Школа магии PHP
- Прекратите использовать Else в ваших программах
- О serverLess PHP
Аудио/Видео
- Laravel EU 2019
- PHP.Barcelona 2019
- Бесплатный курс по Blackfire от SymfonyCasts
- Ноябрьский PHP-митап в офисе Skyeng
- Встреча PHP-разработчиков Уфы
Занимательное
- Как разработчику развиваться в небольшом и не самом айтишном городе
- Как завести pet project и не получить выгоды
- Поддержите разработчиков пакетов, которыми вы пользуетесь с помощью symfony/thanks:
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 168
Комментарии (20)
xxxalz
09.12.2019 21:32на Yii еще кто-то пишет новые проекты?
trueMoRoZ
09.12.2019 21:42+2а чем таки он плох? тем более готовится 3 версия. Знаю вот одну контору, которая собралась переезжать именно на Yii со своего велосипеда.
affka
10.12.2019 06:57+1Еще как пишут! Если речь о Yii2, конечно… Мы его используем с большим числом доработок, правда, с которыми он не чуть не хуже других фреймворков становится)
istepan
10.12.2019 08:36+1Мы пишем новые проекты исключительно на Yii.
Выбор обусловлен тем что у нас все проекты написаны на этой платформе и в России Yii пользуется большей популярностью. Легче найти и обучить разработчика.
Отличная документация на русском и активное адекватное комьюнити.
Ни в коем случае не хочу сказать что другие фреймворки хуже. С удовольствием бы их попробовали, но разводить зоопарк не можем себе позволить.
joffer
10.12.2019 16:09Yii2 вполне хорош, последний большой проект начали именно на нём. Много что удобно сделано, многие вещи позволяется сделать супербыстро, активно используем виджеты, коммьюнити живое и помогающее. Есть и другие фреймворки, тот же кодИгнайтер, та же Ларавель, но Йии вполне удобен и комфортен, чтобы не смотреть по сторонам, по крайней мере это справедливо внутри нашей компании)
vp_arth
09.12.2019 22:06+1> Как узнать равны ли два float в PHP
Заинтересовала статья на предмет корректности.
Насколько я понимаю числа с плавающей запятой, для разных порядков сравниваемых значений нужно брать epsilon разных порядков.
<?php $a = 1e99; $b = $a + 6.07e82; $c = $a + 6.08e82; var_dump($a == $b); // true var_dump($a == $c); // false var_dump(\abs($a - $b)); // 0 var_dump(\abs($a - $c)); // float(1.2141680576411E+83) var_dump(PHP_FLOAT_EPSILON); // float(1.2141680576411E+83)<float(2.2204460492503E-16) ? var_dump(\abs($a - $c) < PHP_FLOAT_EPSILON); // false
Как видим, ненулевая дельта далека от PHP_FLOAT_EPSILON. Смысл последнего сравнения(взятого из статьи) от меня ускользает. Помогите понять, что это и зачем.Hett
09.12.2019 22:29+1Нужно получить эти числа не путем ввода, а путем разнорообразных математических операций.
vp_arth
09.12.2019 22:39+1Ок, согласен.
$a = 1e99; $b = 2e99; $c = 3e99; $ab = $a + $b; var_dump($ab == $c); // false var_dump(\abs($ab - $c) < PHP_FLOAT_EPSILON); // false
Оно и понятно, казалось бы.
На мой взгляд, необходимо привести порядок epsilon в соотвествие с порядком сравниваемых значений, например так:
var_dump(\abs($ab - $c) < PHP_FLOAT_EPSILON * \min($ab, $c)); // true
toratoda
10.12.2019 09:04-7Признаюсь меня бесит PhpStorm: его необходимость писать комментарии и код так чтоб «иде понимала что я хочу написать и подсказывала мне». Я считаю что код должен быть понятен людям, а не редактору в котором я пишу.
Adelf
10.12.2019 17:52+2Один раз я работал в команде, где большинство писало в текстовых редакторах, а не в IDE. Постоянно были PR, в которых тесты валились из-за того что забыли сделать use классу. Или вызвали $this-> там, где это нельзя. И куча подобных вещей, которые юзеры шторма просто не поймут.
toratoda
11.12.2019 11:04Для проверки на такие ошибки существуют phpmd, phpcs, phplint (проверку можно привязать по сохранению файла).
И я не про это, а например про написание комментариев с указанием типов атрибутов чтоб шторм понимал это для подсказки методов, в то время как указание типизации для них уже ввели в php.tendium
11.12.2019 12:33PhpStorm вообще-то не нуждается в подсказках в тех случаях, когда типы указаны однозначно. Но как вы, например, укажете, что вы ожидаете массив объектов с конкретным классом/интерфейсом? В PhpDoc (который, кстати, придумали не в JetBrains) это можно указать как `Type[]`.
toratoda
12.12.2019 13:06-2он нуждается в таком
/** * @var User $user */ $user = Auth::user();
tendium
12.12.2019 17:30+2Нет, он не нуждается. По крайней мере, если сигнатура определена так:
public static function user(): User { // ... body ... }
vp_arth
12.12.2019 17:56В таком он действительно иногда нуждается, но только если тип вывести в общем случае невозможно.
Примеры:
/** @var UserRepository $userRepo */ $userRepo = $this->em->getRepository(User::class);
Или
/** @var User $user */ $user = $meta->newInstance();
Если это критично для вас, всегда можно выделить метод с нужной сигнатурой:
getUserRepository(): UserRepository
toratoda
13.12.2019 08:11-2Для своего метода. Но не для вендорских?
levchick
13.12.2019 09:41+2Скажите, а какой редактор/IDE может выдавать адекватные подсказки для autocomplete на метод, у которого не указан возвращаемый тип и отсутствует phpdoc?
vp_arth
13.12.2019 10:08Так я и писал про вендорские, со своими всё проще.
Метод getRepository — вполне себе вендорский от doctrine.
Использование своего адаптера для такого метода избавит Вас от необходимости помогать IDE с помощью phpdoc:
public function getUserRepository(): UserRepository { return $this->em->getRepository(User::class); }
Таким методом Вы перекладываете ответственность за то, что будет возвращён объект нужного класса на себя.toratoda
13.12.2019 11:24-1Это другая вариация решения той же задачи: код для того чтоб «иде понимала что я пишу».
Jokerzp
Спасибо за очередной дайджест, вы делаете большую работу для всего PHP комьюнити!
В особенности, благодарю за ссылочки на плейлисты с Laravel EU 2019 и PHP.Barcelona 2019, пробежался глазами по названиям докладов — однозначно в закладки.