Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.
Приятного чтения!
Новости и релизы
- Высокопроизводительный PHP — PHP-PM — Два года назад автор поста опубликовал заметку о запуске Symfony-приложения с помощью ReactPHP. Тогда это позволило получить десятикратный прирост производительности. В посте автор проводит ретроспективу и обзор текущего состояния проекта. Например, сейчас с помощью php-pm так же можно запустить приложения на Laravel, Zend, Drupal.
- WordPress 4.5 “Coleman” — Вышедшая версия содержит ряд малозаметных улучшений, а вот среди изменений, запланированных на 4.6 можно заметить предложение о реализации PSR-4 автозагрузчика.
- league/oauth2-server 5.0 — Свежее обновление реализации OAuth 2.0 сервера на PHP. Под капотом поддержка PSR-7, JWT, и множество улучшений. Пост в поддержку.
- nikic/PHP-Parser 2.1.0
PHP
- RFC: Attributes — Предлагается реализовать механизм нативных аннотаций в PHP. Синтаксис позаимствован из Hack. Атрибуты не исполняются, но сохраняются в абстрактном синтаксическом дереве PHP и могут быть затем использованы в PHP-расширениях, препроцессорах, и непосредственно в скриптах.
<<...>> <<...>> function foo() {}
- RFC: Anonymous Class Lexical Scope — Автор предлагает решить проблему передачи зависимостей в анонимный класс. Для этого предлагается использовать
use
как в замыканиях:
$foo = 5; $foo = new Bar() use($foo) { public $foo; };
- RFC: Union Types — Начиная с PHP 5.1 можно явно указывать тип передаваемых параметров, а с PHP 7.0 также тип возвращаемых значений. Предлагается сделать возможным указания множественных типов:
function (Array | Traversable $in) { foreach ($in as $value) { echo $value, PHP_EOL; } }
- RFC: Nullable Types — Также предлагается сделать возможным указание типа, который может быть пустым null:
function foo_nullable(?Bar $bar) {} foo_nullable(new Bar); // valid foo_nullable(null); // valid foo_nullable(); // invalid
- RFC: Generic Types and Functions — Предложение реализовать генерики (шаблоны) в PHP породило волну обсуждений.
А как считаете вы, насколько оправдана такая возможность в PHP? Оставляйте свой голос в опросе в конце поста и делитесь мнением в комментариях.
Инструменты
- teamtnt/tntsearch — Полнофункциональный движок полнотекстового поиска на PHP.
- PHPMessageBus/messagebus — Реализация шины сообщений (CommandBus, QueryBus, EventBus) на PHP 7.
- paragonie/csp-builder — Библиотека упрощает внедрение стандарта безопасности Content Securiy Policy, который позволяет защититься от XSS и подобных атак.
- lavary/crunz — Библиотека для работы с cron-задачами. Позволяет задавать промежутки выполнения в человеко-понятном виде.
- SerafimArts/Properties — Реализация свойств в PHP на основе phpdoc деклараций. Прислал serafimarts.
- simplepie/simplepie — Простой парсер Atom/RSS фидов.
- tightenco/jigsaw — Статический генератор сайтов на основе шаблонизатора Blade. Пост в поддержку.
- Corollarium/cachearium — Библиотека для кэширования.
- DusanKasan/Knapsack — Удобная библиотека для работы с коллекциями.
- leroy-merlin-br/mongolid — ODM для MongoDB.
- sebastianbergmann/phploc — Классический инструмент для оценки размера проекта.
- jmespath/jmespath.php — Библиотека реализует язык запросов для JSON-документов.
- ramsey/uuid — Реализация генератора UUID по стандарту RFC 4122. Пост в поддержку.
Материалы для обучения
Symfony
- Суперскоростной Symfony — ReactPHP
- Суперскоростной Symfony — nginx
- Symfony: обработка запросов в API
- Фильтрация данных в Symfony
Yii
- Гибкая модульная архитектура на Yii2 — Прислал HaruAtari.
- yeesoft/yii2-yee-cms — CMS на Yii 2.
Laravel
- zeeshanu/dingo-project-managment — Клон Trello на Laravel.
- hyn/multi-tenant — Пакет позволяет реализовать мультисайт на Laravel.
- InfyOmLabs/laravel-generator — Кодогенератор API и админки.
- Mahmoudz/Hello-API — Скелет и платформа для разработки RESTful API на Laravel.
- Отправляем логи Laravel в ElasticSearch с помощью Logstash
- Laravel Timestamp Validator
- PHP 7 Arrays: HashTables — Отличная статья от Julien Pauli о внутреннем устройстве хеш-таблиц в PHP.
- Мультиязычные приложения с помощью Twig и Gettext
- Ускорение автозагрузки в PHP 5.6 & 7.0+
- Как внести свой вклад в PHP: Исправляем баги в ядре PHP
- О проблемах безопасности при десериализации в PHP
- Трансдьюсеры в PHP легко и просто
- PSR-7 и куки сессии
- Использование PSR-7 middleware с помощью ReactPHP — Интересный пост об адаптации PSR-7 в ReactPHP, результатом которой стал пакет phly/react2psr7.
- breakthenet/HackMe-SQL-Injection-Challenges — Интерактивная обучалка по обнаружению SQL-инъекций.
- Обзор изменений и планов по ZF3 за последние три недели
- Анализ зловредного спамерского скрипта
- PHPUnit для начинающих. Часть 3: Тестовые «двойники»
- Кэширование запросов с помощью PHP и MySQLnd
- Бенчмарк Magento 1.9 CE и Magento 2.0 CE на PHP 7
- Увеличение производительности Magento
- PHP UK Conference 2016
- Как я опробовал Microsoft Project Oxford + Telegram Bot API
- Оптимизация модели Nested Set в PHPixie
Аудио и видеоматериалы
- Zend Expressive за 15 минут
- Что нового в PhpStorm 2016.1
- PHP Roundtable #044: Asynchronous PHP
- Пятиминутка PHP: Выпуск №19 — PHP Annotated Monthly
- SDCast #42: в гостях Антон Шевчук
Занимательное
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Присылайте ссылки на интересные статьи или полезные инструменты, которых не было в PHP-Дайджестах, и ваше имя будет рядом с присланной ссылкой в выпуске.
Быстрый поиск по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 83
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (15)
gogolinsky
25.04.2016 09:54+1Отличная подборка, спасибо!
Заинтересовала вот эта библиотека teamtnt/tntsearch.
Как вы собираете такой дайджест?Megas
25.04.2016 15:06Интересно бы посмотреть на бенчмарк этой библиотеки. Если будете пробовать её, то дайте знать обществу:
Как быстро ищет в базе с миллионами записей?
Сколько памяти ест?
На сколько нагружает проц?
На сколько легко добавляются/удаляются записи из индекса?
И т.д.
zizop
25.04.2016 14:38Интересен комментарий автора ReactPHP на тему PHP-PM:
PHP-PM, manages ReactPHP processes (see Bring High Performance Into Your PHP App)
benchmarks showed it wasn't much faster than vanilla Symfony, which might be due to configuration issues
Кто-нибудь реально юзал кого-нибудь из этих зверей?andrewnester
25.04.2016 16:13если не ошибаюсь, fesor. по крайней мере, он часто его упоминает :) лично у меня его так и не получилось нормально завести для Laravel
Fesor
25.04.2016 17:48Использую в «продакшене» на личном проектике (правда там не symfony а только отдельные его компоненты). На коммерческих проектах пока не доводилось, только reactphp сам по себе использую.
По сути в моем случае из stateful сервисов пришлось только с доктриной повозиться (просто отчищать unit of work после каждого запроса, что не сложно). А вот целую laravel так запускать наверное сходу не выйдет, уж слишком много там stateful штук может быть.
По поводу использования в продакшен: https://twitter.com/MarcJSchmidt/status/723480541572554753
HaruAtari
> Также предлагается сделать возможным указание типа, который может быть пустым null
Сейчас такое можно сделать, если указать для аргумента значение по умолчанию null. Но иногда действительно не хватает возможности просто передать null в обязательный аргумент.
Но больше всего жду возможности вернуть null из метода с явно указанным типом возвращаемого значения. Это единственное, что останавливает меня от применения этой фичи. А очень хочется :)
Вообще здорово, что PHP движется в эту сторону. А главное, что все указания типов опциональны. Если надо быстро на коленке скрипт накидать, то не придется с этим заморачиваться. А в крупных проектах указание типов будет очень кстати.
vladqa
А как же billion-dollar mistake? Сейчас все языки пытаются избавиться от такой возможности, т.к. это ведет к огромному количеству NPE, а вы хотите это впихнуть в PHP :(
Имхо, лучше делать ограничения и доп. проверки при использовании nullable-типов, например, как это сделано в Kotlin'е.
HaruAtari
Вот когда введут option типы, тогда и можно будет от null избавляться.
maxru
Для вас уже сделали hack :)
HaruAtari
Ну так то отдельная тема.
Просто есть нововведения, которые надо вводить последовательно. Если мы хотим избавиться от null, то сначала нужно предоставить альтернативу ему. Если мы вводом явное указание типов, но надо не просто ввести для галочки, а позаботиться о том, чтобы оно хорошо уживалось с другими фичами языка.
Например в PHP очень не хватает (лично мне) возможности указывать трейты в качестве типов. Т.е. я указываю, что функция принимает в качестве аргумента любой класс, который реализует такой-то трейт. В скале такое, например, есть. И это очень удобно. Ведь трейты — удобная штука. Дает возможность легко использовать расширение вместо наследования. Но с полиморфизмом беда выходит из-за невозможности указания его в качестве типа.
maxru
Ну, пока только так:
To specify a type declaration, the type name should be added before the parameter name. The declaration can be made to accept NULL values if the default value of the parameter is set to NULL.
Ну в хаке "?" удобнее, конечно.
HaruAtari
Я думаю в ближайших версиях к этому все равно придут.
Есть такое RFC.
Fesor
Это будет очень плохой фичей. Вместо этого трейтам хотят разрешить имплементить интерфейсы.
HaruAtari
Да. Это хорошее решение будет, если примут.