Свежая подборка со ссылками на новости и материалы. В выпуске: Laravel 5.6 и другие релизы, свежие RFC из PHP Internals, порция полезных инструментов, и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.2.2
- PHP 7.1.14
- Laravel 5.6 — Добавлен nunomaduro/collision в качестве обработчика ошибок консольных команд, а также другие улучшения.
- Xdebug 2.6 — Добавлена поддержка PHP 7.2, приостановлена поддержка PHP 5, а также несколько новых возможностей.
- goaop/framework 2.2.0
- PHPUnit 7
- Новости PHP FIG #2–4: ноябрь 2017 — январь 2018
PHP Internals
- [RFC] Fiber — Предлагается реализовать стэкфул-корутины, по сути, замыкания, которые можно ставить на паузу и возобновлять. При этом планирование (scheduling) выполняется на стороне пользователя, а не VM. Данное улучшение упростит написание асинхронных приложений и сделает, при этом выглядящими совсем как синхронные. Уже доступно расширение, и даже примеры использования.
- [RFC] Deprecation of fallback to root scope — При использовании функций/классов внутри неймспейса, в случае если они не найдены, то будет попытка автоматически откатиться к глобальному скоупу. Предлагается упразднить данную возможность и бросать предупреждение:
namespace Bar; strlen(); // сначала попытка вызвать \Bar\strlen() // если не найдена, то будет вызвана \strlen() > Undefined function \Bar\strlen(), assumed \strlen()
- [RFC] Deprecate backtick operator — Предлагается задеприкейтить оператор кавычки
``
.
Инструменты
- Bogdaan/spycss — Отслеживаем действия пользователя с помощью CSS.
- daniilgrigorovabi/abimodelpattern — Операция «Ы» и новая библиотека ABI
- z7zmey/php-parser — Парсер PHP реализованный на Go.
- consistence/consistence — Библиотека обещает исправить ошибки консистентности в PHP. Подробнее в посте автора.
- PHPJuice/slopeone — Реализация алгоритма коллаборативной фильтрации Slope One.
- calcinai/phpi — Событийная библиотека для работы с Raspberry Pi GPIO.
- sroze/companienv — Полезный хелпер для работы с .env-файлами.
- Arrexel/phpbash — Полуинтерактивный PHP-шелл в одном файле.
- pascaldevink/shortuuid — Библиотека для PHP 7.1+ для генерации коротких UUID для использования в URL.
Материалы для обучения
Symfony
- Неделя Symfony #579 (29 января — 4 февраля 2018)
- Неделя Symfony #580 (5-11 февраля 2018)
- Pull Request #26059 · symfony/symfony — Интересный пул-реквест, который обещает ускорение роутинга до x77.7 раз.
Yii
- Vintage-web-production/yii2-search — Компонент для поиска в БД, используя модели Active Record для Yii2. Прислал greeflas.
- Продвинутый курс по PHP + Yii 2
Laravel
- Стайл гайд и лучшие практики для Laravel
- GroupBy по нескольким значениям в Laravel
- PHP Antwerp — Паттерны проектирования Laravel
- tormjens/eventy — Система хуков и фильтров а-ля WordPress для Laravel.
- nunomaduro/laravel-console-menu — Красивые консольные меню для Laravel-команд.
- GeneaLabs/laravel-model-caching — Кэширование моделей Eloquent.
Async PHP
- Асинхронный PHP: Зачем?
- ReactPHP вместе с RecoilPHP, ч.2, ч.3 — Использование recoilphp/recoil позволяет писать асинхронный код на основе корутин.
CMS
- Более 2000 сайтов под управлением WordPress оказались поражены кейлоггером
- История взлома одного WordPress плагина — или о том, как вы допускаете уязвимости в своих проектах
- 29% вебсайтов уязвимы для DOS-атаки даже одной машиной (CVE-2018-6389)
- Руководство по безопасности WordPress
- Неделя WordPress: январь 2018
- Тестирование легаси PHP-скриптов
- Уменьшаем число вызовов функции с помощью DI и передачи контекста
- Vim в качестве PHP IDE — полное руководство
- Безопасная настройка Composer — Прислал falldi.
- Mockery: частичные двойники (mock'и)
- Обновляем расширение Intl в PHP 7 на Linux Ubuntu 16.04
- Как поднять проект на PHP в Docker под Windows
- Ваш пакет Composer сломан: обновите идентификатор лицензии
- Дружим gRPC с долгоживущим проектом, PHP и фронтендом
- Хочу как у YouTube — Об идентификаторах в распределенных системах.
- Numphp — работа с числовыми векторными массивами и матрицами
- Опыт веб-разработки при создании игры «Составь слова»
- Standards.REST — Коллекция стандартов и спецификаций для разработки API.
Аудио и видео
- Подкаст That Podcast #45: Еще раз об PSR-15
- Подкаст Three Devs & A Maybe: О симметричном и асимметричном шифровании со Scott Arciszewski (Paragon IE)
- Шифрование, аутентификация и целостность даных в PHP 7
Занимательное
- Ты это не твой фреймворк
- Arionum — Криптовалюта, реализованная на PHP.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 124
Комментарии (14)
JhaoDa
12.02.2018 02:44daniilgrigorovabi/abimodelpattern — Операция «Ы» и новая библиотека ABI
Зачем ЭТО в дайджесте?
Akdmeh
«Deprecation of fallback to root scope» — зачем полностью ломать обратную совместимость скриптов? Это что, больше безопасности добавит? Придется ведь переписывать код всех существующих библиотек и скриптов!
Редчайшая глупость, надеюсь, этот RFC не примут.
SerafimArts
Согласен, сообщество ещё не готово к подобным потрясениям, очень мало вижу код тех, кто указывает неймспейсы явно. Вон, в том же симфони это только недавно начали внедрять потихоньку. Так что этот RFC пока ещё не нужен.
Но всё же тот факт, что указание явного неймспейса ускоряет код до 20% почти на пустом месте (за счёт снижения количество опкодов Zend VM) должно сильно подстегнуть разработчиков. Так что, думаю, года через 2-3 можно будет уже начинать думать об этом RFC.
dizzy7
Мало того что все все переменные идут с префиксом $, теперь ко всем функциям надо будет добавлять префикс \, банально неудобно. Функции в неймспейсах по опыту используются крайне редко, чтобы это делать мейнстримом, а проблему производительности возможно получилось бы решить на уровне оптимизаций opcache — в момент компиляции проверять существует ли функция в текущем/импортированном неймспейсах и если нет, сразу писать опкоды для вызова root-функции.
Hello1
Функции может не быть в момент компиляции, но она может появиться в runtime, привет eval.
symbix
Да какой eval? Достаточно обычного include. Файлы в Zend Engine компилируются независимо друг от друга, никаких заголовочных файлов, как в C, в PHP нет.
SerafimArts
В перепутали eval с поздним динамическим связыванием. В отличие от раннего, функции резолвятся из таблицы символов во время их непосредственного вызова, а не во время линковки.
P.S. Для корректного резолва этих функций и генерируется нужный трёхадресный код (в нашем случае опкоды Zend VM), который указывает каким образом нужно обратиться к нашей функции. Указание неймспейса явно позволяет собрать эту команду в один единственный опкод с явным вызовом функции без резолва её неймспейса.
Akdmeh
Если это дает явное ускорение — тогда это должно быть на усмотрение разработчиков, нужно им это ускорение или нет.
gro
Когда появились неймспейсы сам все функции начинал с \
Сейчас смотрю, такой крндец…
xotey83
Теперь можно делать
И далее в коде не использовать обратные слеши.
wapmorgan
А можно объединять импорт через ",":
Еще как вариант: может стоит сделать «объединяющий» импорт (как, например, в питоне), чтобы не плодить десяток строк?
Fesor
если это был вопрос — то да, можно:
как разруливать конфликты имен? Нет уж, пусть лучше будет явным. Тем более что IDE за вас это все проставляют, да и это в целом неплохой способ быстро оценить связанность модулей. Смотрим на начало файла и понимаем от чего он зависит и что юзает.
Увы PHP не JS что бы можно было писать в духе
import * as foo from './foo'
.m0rtis
Deprecation — это же не удаление. Будут сыпаться нотисы. На мой взгляд, полезно. Сам уже давно настроил в PHPStorm автоподстановку слэша.
Fesor
В RFC включены ссылки на инструменты которые помогут вам это сделать. Так что не вижу проблемы. Более того, если в ветке 7x это не задепрекейтить, в 8-ку это уже никак не запихнуть.
это добавит чуток производительности и сделает управление зависимостями более явным (что добавит в конечном итоге безопасности за счет статического анализа).