Xdebug в качестве интерактивной оболочки (REPL) в Phpstorm — чем заменить Python/JS консоль для Php

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Перешли с Python на Php, а привычной интерактивной оболочки из PyCharm нет? Пользуетесь JS-консолью в инструментах разработчика браузера, а для Php такого нет? Не беда, ведь в качестве интерактивной оболочки можно использовать консоль Xdebug! И мало того, что она интегрирована с Phpstorm, и там работает автодополнение кода прямо из проекта, так еще там есть такие фичи, которых и вовсе нету ни в Python Console , ни в подобных REPL-интеграциях других языков программирования. Более того, подготовить нужную конфигурацию для запуска можно менее чем за минуту.

Что такое REPL

Сокращение REPL расшифровывается так:

  • Read — прочитать ввод от пользователя

  • Eval — выполнить введенный код

  • Print — распечатать на экран результат

  • Loop — снова войти в режим ожидания

По сути, REPL - это консоль для выполнения команд языка программирования. Чтобы не нужно было для этого создавать отдельный файл. Также в REPL можно выполнять и простые выражения, например 2+2.

В чистом виде REPL имеет CLI-интерфейс, и может запускаться прямо в командой строке, например в том же cmd в Windows. Но гораздо удобнее работать с REPL, когда она интегрирована в интерфейс IDE.

Запуск консоли

Для того, чтобы запустить консоль, нужно просто создать php-файл, оставить там точку остановки, и запустить его отладку прямо из Phpstorm (то есть браузер не потребуется). В консоли Xdebug можно выполнять произвольный php-код, и будут доступны привычные фичи редактора Phpstorm, такие как автодополнение, подсветка синтаксиса и т.д.

Если вас смущает необходимость наличия отдельного php-файла, то вы можете обернуть точку останова в eval, и тогда файл с точкой останова не будет открываться в редакторе при запуске отладки. И со стороны это будет выглядеть так, будто бы вы просто запустили консоль.

eval('xdebug_break(); return;');

Для того чтобы сама отладка запускалась, нужно просто подключить интерпретатор Php. То есть не потребуется возиться c настройкой Xdebug на сервере — прописыванием директив в php.ini и т.д. Поскольку отладка скрипта будет запускаться в CLI режиме, то их можно передавать динамически, в отличие от веб-режима (запуск в браузере). При этом все необходимые параметры Phpstorm автоматически передаст в момент запуска, а дополнительные можно будет добавить в настройках интерпретатора. Также необязательно, чтобы xdebug был включен на сервере — главное чтобы он был там установлен. Вот как это все выглядит — на примере подключения интерпретатора с удаленного сервера:

Прокидывать SSH-туннель так же не потребуется, но это при условии, что на сервере не закрыты порты xdebug — 9000 либо 9003. Если же они закрыты, то отладка не запустится, и если нет возможности открыть порты, то нужно будет прокинуть SSH-туннель в терминале:

ssh -R 9000:localhost:9000 username@host-ip

А также установить в настройках интерпретатора директиву xdebug.client_host (xdebug.remote_host для xdebug < 3 версии) cо значением localhost.

Бонусные фичи

Возможности интерактивной оболочки Xdebug выходят за пределы использования консоли. Мало того, что есть фича Evaluate In Console, позволяющая в данную консоль отправить участок кода прямо из файла. Так и помимо этого тут есть такая функция, как Quick Evaluate Expression (ctrl+alt+F8 либо alt+shift+mouseClick), позволяющая выполнять выражения прямо в файле, причем в любом порядке:

Автоматическое подчёркивание доступно при использовании Alt+Shift+mouseClick, так как само оно вызывается при нажатии Alt+Shift.

Также есть и просто Evaluate Expression (Alt+F8)— выполнение выражения в одноименном окне. Это удобно, если например, нужно выполнить нужно отредактировать выражение, перед тем как его выполнить, но чтобы не вносить изменения в файл, в котором оно находится.

Для данной фичи нету предустановленного Mouse Shortcut, поэтому его нужно будет установить самому в настойках, если вы хотите пользоваться автоподчеркиванием. Я например поставил Ctrl+Alt+Shift+RightMouseClick.

Вообще при использовании данных фич сама по себе консоль могла бы быть и вовсе не нужна. Однако выполнение нескольких выражений сразу либо языковых конструкций (if-else, echo и т.д) пока что не поддерживается ими, и работает только в консоли. Чтобы приблизить реализацию данной возможности, вы можете проголосовать за это здесь. А пока что в качестве обходного пути можно оборачивать такой код в IIFE:

(function(){
    //your php-code
})()

Вывод сообщений об ошибке

У Xdebug долгое время была проблема с выводом названия ошибки, и вместо этого просто выводилось “error evaluate code”, без уточнения, что именно произошло. В Xdebug 3.3 это исправлено, однако релиза стабильной версии еще не было, и он будет в конце 2023 года.
На версиях младше есть обходной пусть — вывод стека исключений в консоль, однако кроме консоли их больше нигде и не будет — то есть например с окна Evaluate Expression нужно будет переключатся на консоль.

Чтобы включить этот обходной путь, нужно добавить в настройки интерпретатора директиву xdebug.show_exception_trace=On. На версиях xdebug старше 3 также нужно добавить xdebug.mode = develop, debug.

Если не выводится echo в консоли

По умолчанию в CLI режиме php включен неявный сброс, так что при выполнении echo сразу должен быть вывод результата в консоль, а не при завершении скрипта. Но если этого не происходит, значит, включилась буферизация вывода (например, где-нибудь в коде вашего проекта при его подключении). И ее нужно отключить командами ob_end_clean(); либо ob_end_flush()

Источник: https://habr.com/ru/articles/776590/


Интересные статьи

Интересные статьи

Привет! Я Аля — продакт-менеджер выделенных серверов Selectel. Люблю быстрое тестирование гипотез (и да, верю, что в B2B это возможно), общаться с целевой аудиторией и чистить бэклог. Хочу подели...
В моём окружении часто отправляют гифки с котами. К сожалению, рано или поздно запас заканчивается, и приходится идти и искать новые. Недавно я пошёл искать новые, после чего мне пригла идея автоматиз...
На прошлой неделе компания Monotype — владелец прав на популярные шрифты Times New Roman, Verdana, Arial, Helvetica и Tahoma — объявила об ограничении доступа из России к своей библиотеке и сообщила о...
Привет, Хабр! Когда я изучал паттерны проектирования, я делал это с помощью прочтения двух книг: простую и понятную книгу от Head First одновременно со сложной и менее понятной книгой от Банды Четырех...
Кто сегодня не слышал про вебинары – реалии сегодняшнего дня. Вебинары уже лет пять назад начали стремительно набирать обороты, а уж сегодня так это массово используемый прием обучения, п...