Вышел PhpStorm 9, NuSphere PhpED и дебаггер с возможностью двигать точку исполнения, правильная настройка opcache, PHP vs Node.js, PHP vs Hack это как Java vs Scala, PHP 7 beta 2, php7backport, RFC: DateTimeInterface removal, Broadway — CQRS и Event Sourcing фреймворк, AsyncPHP/Doorman — child process management с поддержкой PHP 5.3, подкаст «Бананы и линзы».
Всем привет!
Вы слушаете «Пятиминутку PHP», выпуск номер 12 — еженедельный подкаст о новостях из мира PHP, интересных постах в блогах и современных подходах к разработке.
Давненько у нас не было пятиминутных выпусков пятиминутки, возвращаюсь к истокам.
Пару недель назад вышла очередная мажорная версия PhpStrom 9 — IDE для PHP от компании JetBrains. Пожалуй, это самая продвинутая IDE на сегодняшний день, хотя я давненько не пробовал другие. Подробный обзор новых фич девятой версии проводить не буду, лучше почитайте официальный обзор на хабре, там даже есть анимированные гифки. В дополнение к этому прикладываю коллекцию ссылок на статьи с советами по эффективному использованию PhpStrom на Хабре, а также ссылку на YouTube плейлист от JetBrainsTV и на набор коротких, но ёмких скринкастов по PhpStrom на сайте laracasts.com. Только представьте, сколько мы проводим за редактором кода? Научившись использовать все возможности редактора по максимуму, можно сэкономить кучу времени!
- PhpStorm: Tips and tricks. Часть 1
- PhpStorm — повышаем производительность (клавиатурные сокращения). Часть 1
- PhpStorm — повышаем производительность (плагины и темы оформления). Часть 2
- Продуктивное использование PHPStorm (статья 2012 года)
- PhpStorm Docs & Demos Videos на JetBrainsTV
- https://laracasts.com/series/how-to-be-awesome-in-phpstorm
Возвращаясь к теме различных IDE для PHP, я решил освежить свои знания и нашел:
— уже не обновляемый сайт http://www.phpides.com
— не самую свежую таблицу-сравнение на Wikipedia
— ещё более старую таблицу на google docs.
По сути, актуального и хорошего сравнения основных IDE сейчас нет (или я ошибаюсь? напишите мне в комментариях).
Тем не менее, скажу пару слов про редактор NuSphere PhpED, которым я пользовался ещё до появления PhpStorm. Это платная IDE, которая работает только под Windows (впрочем, под wine на linux в конце двухтысячных она у меня запускалась). Вспоминая свой опыт, PhpStorm первой версии (1.0) по совокупности фич оказался более продвинут, чем NuSphere PhpED на тот момент с его многолетней историей. Однако, у PhpED было пару преимуществ, которые, скорее всего, ещё остались.
Первое, что бросалось в глаза: скорость запуска, скорость работы на большой кодовой базе и не на самом мощном компьютере. NuSphere PhpED был написан на C++ (или на чём-то таком нативном) и работал гораздо быстрее PhpStorm’а написанного на Java. Сейчас, если я хочу по быстрому что-то поправить в одном файле и у меня не запущен PhpStorm, я открываю Sublime Text. PhpED был таким же быстрым, как Sublime Text сейчас по сравнению с PhpStorm.
Второе, это их проприетарный отладчик. В процессе отладки можно поменять код, передвинуть указатель выполнения назад (прямо перетянуть мышью на несколько строк выше) и повторно выполнить фрагмент кода с изменениями! Возможно ли такое в XDebug или phpdbg в связке с PhpStorm? Если знаете как, просвятите меня в комментариях.
В голове всплывает аналогия с языком Clojure, в котором практикуется REPL Driven Development — это когда программа запущена и мы меняем код на горячую, вызываем какие-то отдельные функции, смотрим что они вернули, опять меняем код, при этом не перезапускаем всё приложение, не перезапускаем JVM, всё внутреннее состояние сохраняется. Адепты Clojure говорят, что это экономит кучу времени по сравнению с классическим дебаг-процессом.
Думаю, мне стоит скачать последнюю trial версию PhpED и посмотреть, как этот редактор выглядят сейчас на фоне PhpStorm. О результатах расскажу в одном из следующих выпусков подкаста.
Несколько интересных статей.
Первая статья о правильной настройке opcache. Автор показал 20% уменьшение времени ответа на примере symfony приложения.
Вторая — это заметка от Александра Плетнёва (на русском) о разделении приложения на слои. Проблема с которой столкнулся автор — это толстые модели при разработке на фреймворке Yii, когда методы beforeSave, beforeValidate, afterValidate разрастаются и становятся не управляемыми. Решение — Layered Architecture.
Следующая статья — отличное сравнение PHP и Node.js по пунктам: поддержка, синтаксис языка, инструменты разработчика, экосистема, интеграция с другими системами (например, базы данных), хостинг и деполймент, производительность, активность комьюнити, будущее языка.
Ещё одно занятное сравнение, проводящее параллели между миром PHP и миром Java. А именно язык Hack по сравнению с PHP, это как язык Scala по сравнению с Java — как вам такое?
Тем временем вышла вторая бета PHP 7 — исправлено 28 багов, сделано более 200 коммитов, держу вас в курсе.
Если не терпится начать пилить новые фичи для production с синтаксисом PHP 7, то для вас уже готова утилита, конвертирующая PHP 7 код в PHP 5: php7backport. Она написана на PHP и использует php-parser от Никиты Попова. Кстати, что вы думаете о PHP, как о хост языке, в который можно было бы компилировать другие, как это сейчас модно в мире JavaScript?
Поступил свежий RFC с предложением убрать DateTimeInterface и это серьёзный breaking change. Основной аргумент в том, что этот интерфейс на самом деле должен быть внутренней кухней и не должен быть виден пользователю. Кроме того, в PHP 5.5.8 уже сломали обратную совместимость, запретив создавать собственные классы имплементирующие DateTimeInterface. И, чтобы не доводить до греха, автор предлагает убить этот интерфейс на корню.
На последок пара репозиториев на заметку.
Broadway — фреймворк, полностью интегрируемый с Symfony, и удобный для создания приложений с CQRS и Event Sourcing архитектурой.
UPD: уже после записи подкаста Ragazzo подкинул ещё пару CQRS фреймворков: https://github.com/szjani/predaddy, https://github.com/SmartGecko/GovernorFramework
AsyncPHP/Doorman — это библиотека child process management, которая работает на версиях PHP от 5.3 до 7.0 и не требует extetions. Если вы уже пробовали или сталкивались с reactphp/child-process или icicleio/concurrent, то это тоже самое, только выглядит проще и работает даже на PHP 5.3.
На этом пятиминутная пятиминутка подходит к концу и, чтобы вы не скучали до следующего выпуска, прорекламирую новый русскоязычный IT подкаст под названием «Бананы и линзы». Кто догадался о чём он? Да, правильно, этот подкаст полностью про Haskell! Тут мне вспомнился анекдот: когда увольняют программиста на Haskell, ему говорят «собирай свои монадки и уходи».
>Возможно ли такое в XDebug или phpdbg в связке с PhpStorm
В первом приближение достаточно как-то через xdebug-овый eval как-то выполнить опкоды, что-то типа JMP или GOTO что бы сдвинуть точку выполнения, опкоды кажется можно выполнить с помощью APC, но вероятнее проще пропатчить xdebug. Дальше встанет вопрос как выполнить измененный файл, но это уже легче.
Поставил PhpED, начал сравнивать, заполняют таблицу по мере продвижения: https://docs.google.com/spreadsheets/d/1cV5lxwCmFvBdiZTRsu8kFs4VEMKXIX9LPKMWDovAkk4/edit?usp=sharing
Есть еще такая IDE CodeLite, которая помимо С/С++ поддерживает проекты на PHP и Node.js. Бесплатная, легковесная, ИМХО симпатишная.