В выпуске: PHP 7.3.0 alpha 3, PHPStan 0.10, Yii 1.1.20 и другие релизы, свежее предложение из PHP Internals по сравнению объектов, порция полезных инструментов, и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.3.0 alpha 3 — Последний альфа-релиз перед «заморозкой фич». Beta 1 запланирована на 19 июля. Впрочем, даты могут сдвинуться, если будет принято решение включить типизированные свойства в 7.3.
- PHP 7.1.19
- PHP ODESSA CONF 2018 — 11 августа в Одессе пройдет масштабная PHP-конференция. Для читателей PHP-Дайджеста доступен промокод со скидкой 10%: PHPDIGEST
PHP Internals
- PHP 8: чего ждать. Письмо Зеева Сураски Демо производительности PHP 7.0 vs JIT PoC для генерации фракталов
- [RFC] Class Friendship — Стартовало голосование по добавлению дружественных классов. Дружественный класс имеет доступ к private и protected полям класса, в котором он объявлен дружественным.
- [RFC] User-defined object comparison — В документе рассмотрены проблемы сравнения объектов в PHP. Предлагается добавить два новых магических метода:
__compareTo
и__equals
.Скрытый текстclass Example { /** * Returns: < 0 if $this is less than $other, * > 0 if $this is greater than $other, * == 0 if $this is equal to $other. */ public function __compareTo($other): int { ... } /** * @returns bool TRUE if $this is equal to $other, FALSE otherwise. */ public function __equals($other): bool { ... } }
- dstogov/php-tensorflow — Благодаря реализации FFI, станет возможным делать легковесные биндинги для сторонних библиотек. В качестве примера Дмитрий Стогов демонстрирует обертку над TensorFlow.
Инструменты
- Infection 0.9.0 — Обновление фреймворка для мутационного тестирования на основе AST.
- PHPStan 0.10 — Мощный статический анализатор для PHP. Онлайн-песочница для проверки кода.
- sebastianfeldmann/phpbu — Инструмент для создания резервных копий файлов и баз данных. Умеет шифровать бэкапы и отправлять в хранилища.
- leviy/release-tool — CLI-инструмент для релиза новых версий продуктов.
- mediact/dependency-guard — Инструмент покажет неиспользуемые composer-зависимости. А также те, которые используются в коде, но установлены как dev-зависимости.
- ackintosh/snidel — Позволяет легко выполнять код параллельно в форке процесса. Альтернатива spatie/async
- php-lock/lock — Реализация мьютекса для PHP с поддержкой различных адаптеров (flock, memcache, mysql, redis, ...). Альтернатива symfony/lock.
- Imangazaliev/DiDOM — Простая и быстрая библиотека для парсинга HTML. Свежий туториал в поддержку.
Материалы для обучения
Symfony
Yii
- Yii 1.1.20
- Yii development notes #23 — Команда фреймворка разыскивает контрибьюторов:
• Релиз-менеджера, который бы помог планировать релизы, а также писать анонсы релизов и планов на будущее;
• Мейнтейнеров для ревью и мерджа пул-реквестов;
• Мейнтейнеров официальных расширений;
• Core-разработчиков для работы над новыми версиями фреймворка. - Yii 2.0 Part 19 — REST APIs
Laravel
- beyondcode/laravel-self-diagnosis — Пакет для диагностики Laravel-приложения с десятком проверок из коробки.
- beyondcode/laravel-er-diagram-generator — Генерирует диаграмму отношений ваших моделей с помощью GraphViz.
- mpociot/laravel-testtools — Расширение для Chrome, которое сгенерирует интеграционные тесты для веб-приложения на Laravel пока вы просматриваете его в браузере.
- Создание собственного API-интерфейса {JSON: API} средствами Laravel — Прислал bad4iz.
Zend
- DotKernel3 1.0 — Первая стабильная версия набора PSR-7 middleware компонентов для Zend Expressive.
- Zend Framework ACL для пользователей с несколькими ролями
- Интервью с лидером Zend Framework/Zend Expressive Matthew Weier O'Phinney
Async PHP
- reactphp/dns v0.4.15 — Добавлена поддержка IPv6.
- Введение в ReactPHP
- Быстрый веб-скрапинг с помощью ReactPHP. ч. 3: Используем прокси
- Рендеринг HTML файлов: глава из книги «ReactPHP для начинающих» от разработчика Skyeng
CMS
- Критическая уязвимость в WordPress — Дыра позволяла удалить любой файл в инсталляции WP. Уязвимы все версии <4.9.6. Ошибка исправлена в 4.9.7
- Руководство по безопасности WordPress
- Месяц WordPress: июнь 2018
- Magento Tech Digest #22: June 27 – July 2, 2018
- Не используйте ассоциативные массивы, вообще говоря, никогда
- Анонимные классы как приватные классы пакета
- Phpdbg намного быстрее Xdebug для подсчета покрытия
- PHP-окружение с помощью Docker-Сompose с нуля
- Простой IOT-девайс с помощью PHP и Raspberry Pi Zero W
- Как скомпилировать и пощупать нерелизнутый RFC — Быстро попробовать потенциальные возможности из RFC можно в 3v4l.org.
- Безопасное хранение учётных данных в PHP
- Львы в пустыне и интроспекция
- Низкоуровневая реализация префиксного дерева trie на PHP
- PHP-DataGen — генератор PHP классов со строго-типизированными свойствами
- Аспектно-ориентированное программирование на PHP
- Пятничная PHP-викторина: немного приключений программиста Брэда, одна странная последовательность и призы
- Расширение PHP и Kotlin Native. Часть первая, наивная
- Code Basics: бесплатные практические уроки для новичков
Аудио и видеоматериалы
- PHP Rountable Podcast #74: О хранении паролей и прочей секретной информации в PHP приложениях
- Zeev Suraski — To PHP 7 and beyond — Об эволюции производительности PHP и планах на будущее.
Занимательное
- PHPlashy — The Official PHP Vegas ElePHPant — Сообществом PHP Vegas запущена краудфандиноговая кампания для производства блестящих PHP-слоников.
- Забавный тред на Reddit о странных задачах, которые пользователи решали с помощью PHP — А какую самую странную программу написали на PHP вы?
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 133
Комментарии (23)
rjhdby
09.07.2018 10:10Стартовало голосование по добавлению дружественных классов. Дружественный класс имеет доступ к private и protected полям класса, в котором он объявлен дружественным.
Class Friendship allows a class to be better encapsulated by granting per-class access to protected members.
Как-то очень спорно.
Страшно представить, к какой адской запутанности кода может привести подобное решение.molchanoviv
09.07.2018 10:28Тоже считаю это вредоносным предложением. Вон в C++ добавили дружественные классы, так теперь мучаются с ними.
godzie
09.07.2018 12:02Голосующие товарищи видимо с вами согласны. А вот мне наоборот, нравится идея. Использовал бы дружбу повсеместно в домене для лучше инкапсуляции. Например стало бы возможно запретить любое изменение связанной сущности кроме как через агрегат.
rjhdby
09.07.2018 12:43О какой лучшей инкапсуляции можно говорить в контексте предоставления доступа к приватным полям сторонним объектам?
godzie
09.07.2018 13:02Пример:
Class User public function updatePost($args) { if ($this->status->isPrymary()){ $this->post()->update($args); } }
Итого берем аггрегат, проверяем какие то бизнес правила, обновляем пост. Другому программисту поставили задачу реализовать обновление поста в другом месте, он извлекает пост — обновляет — кладет в хранилище. Заботливо спроектированный защитный метод пошел по ветру.
Я хочу сказать что если сущность x является частью агрегата y то мне нужен способ инкапсулировать работу с x через y. Это лучше чем просто следовать эвристике «делаем все через корень агрегата».delight-almighty
09.07.2018 23:59Может быть разумнее было бы расширить список модификаторов доступа? Например, модификатор package в java или модификаторы в c# решают подобные проблемы куда изящнее.
godzie
10.07.2018 13:02+1Согласен. Но касательно friends аргумент в стиле «это приведет к запутанности кода» выглядит по меньше мере странно. Есть те же трейты которыми код можно запутать уж точно не меньше. Простое правило — нужно используй, не нужно — не используй, вполне решает данную проблему.
zim32
10.07.2018 10:42Аьв недавно столкнулся с такой необходимостью. К примеру паттерн билдер где работа делегируется объектам и не хочется все методы делатт паблик
morozovsk
09.07.2018 10:40+1Не используйте ассоциативные массивы, вообще говоря, никогда
Я бы не был настолько категоричен, только если речь идёт об очень больших массивах. Делал своё мини исследование на эту тему в рамках highloadcup. Автору удалось уменьшить использование памяти в 2 два раза, у меня с помощью разбивки одного ассоциативного массива на несколько SplFixedArray получалось уменьшить расход памяти в 8,5 раз.ZloAdmin
10.07.2018 10:28Тоже подумал сразу о SplFixedArray. Но сейчас с приходом PHP 7 (7.3 в большей степени) показатели уже не такие плохие.
morozovsk
10.07.2018 12:12Но сейчас с приходом PHP 7 (7.3 в большей степени) показатели уже не такие плохие.
Ссылаться на тесты php 5 в 2018 году не имеет никакого смысла, конечно же все мои тесты были на php 7, на гитхабе об этом написано, а php 7.3, насколько мне известно, ещё не зарелизился.
seregazolotaryow64
09.07.2018 12:25Сейчас на Yii 1.1.15 делаю сайт благотворительного фонда. В этом мне помогает мамина коллега по ОНФ. Доверяю этой версии после изучение книги Дронова по HTML5 и PHP. Именно он использовал эту версию фреймворка. Эту книгу мне подарили на Новый 2018 Год.
Остался месяц и сайт будет готов на этом фреймворке.xRay
09.07.2018 13:56+1А зачем на Yii 1-ой версии, а не на Yii 2-ой версии?
seregazolotaryow64
09.07.2018 19:09Последую примерами из книги Дронова. Эта версия хорошая, компактная и имеются редкие ошибки. Работает более хорошо. Скачал с гитарой через рабочий браузер.
nickskitev
09.07.2018 16:52CMS: Вышла новая версия CMS на Symfony eZ Platform 2.2: новость в блоге, GitHub.
vlfesko
09.07.2018 23:58Касательно «Phpdbg намного быстрее Xdebug для подсчета покрытия» — есть сомнения, что результаты покрытия совпадают, о чем предупреждает сам автор Xdebug. Стоит отнестись с осторожностью:
hackernoon.com/generating-code-coverage-with-phpunite-and-phpdbg-4d20347ffb45
porn
Этот выпуск оказался «более лучше» полезен, чем предыдущие. Спасибо за подборку!