Программисты python и ruby наверняка не раз пользовались такой замечательной штукой как интерактивная консоль. Такая консоль позволяет быстро потестить какой-то код, функцию или класс, да и просто удобно при изучении языка. К сожалению, по непонятной мне причине, авторы php не утрудили себя созданием аналогичной вещи.
Однако недавно, при написании топика про HipHop, я заметил, что фейсбуковцы уже создали такой инструмент – phpsh. Прежде чем его попробовать, я решил поискать в Интернете и другие решения, и вот что мне удалось найти.
PHP Interactive mode
http://www.php.net/manual/en/features.commandline.interactive.php
Оказывается, в интерпретаторе php уже есть интерактивный режим, для этого надо запустить его с ключом -a.
$ php -a
Interactive shell
php > echo 5+8;
13
php > function addTwo($n)
php > {
php { return $n + 2;
php { }
php > var_dump(addtwo(2));
int(4)
php >
Появился в версии 5.1.0.
Из минусов: в Windows работает очень убого, вылетает при первом fatal error.
В *nix-ах работает автодополнение благодаря GNU Readline. Автодополнение работает для функции, констант, названий классов, переменных, статических методов. Подойдет, если вы работаете в линуксе :)
phpa
http://david.acz.org/phpa/
PHP-скрипт. Достаточно запустить его командой
$ php phpa.php
Не забудьте поставить права на выполнение. Поддерживает автодополнение функций и констант. Если код печатает что-то в вывод, то это и выводится, иначе выводится значение выражения.
>>> $x = pow(2, 10)
>>> echo $x
1024
>>> $x * 4
4096
Не работает в windows вообще, так как обязательно наличие библиотеки readline (http://www.php.net/readline). Также вылетает при fatal error.
PHP Shell
http://jan.kneschke.de/projects/php-shell/
Возможности:
- автодополнение tab-ом (если есть readline())
- корректно обрабатывает fatal error
- внутреняя справка
- работает везде где работает php
Работает в php5. Автодополнение работает не только для функции, классов и т.д. но и для экземпляров классов, т.е. типа $object->method(); Также может показать DocComment-ы для классов, методов и функции, для этого надо набрать ? и имя класса.
Отлавливание ошибки:
В целом неплохая штука, на мой взгляд более лучше чем два предыдущих.
phpsh
http://www.phpsh.org/
Был сотворен в недрах facebook. Имеет автодополнение, историю команд даже между сессиями(!), просмотр документации. Более того, phpsh интегрируется с ctags - это позволит использовать все его фичи для ваших собственных классов, функции и т.д, т.е. загрузить ваш собственный codebase.
В анонсе разработчики утверждают, что phpsh работает везде, где работает python2.4 с модулем subprocess и, опять же :), GNU readline, т.е. Linux и OSX, но не Windows. Требования для python: pysqlite, readline. Мне удалось запустить phpsh под cygwin, для этого пришлось изрядно постараться:
- Сначала ставим последнюю версию cygwin.
- В установщике ставим пакеты python и gcc (нужен для сборки pysqlite).
- Запустив cygwin, для python ставим пакеты readline (ставится легко через easy_install) и pysqlite (придется собрать из исходников, что в свою очередь потребует скачать исходники sqlite)
- Устанавливаем php (cli) под windows, т.к. под cygwin мне так и не удалось поставить php (да это и не нужно в принципе).
- Качаем phpsh, распаковываем, меняем кое-что в питоновском файле phpsh, чтобы он использовал виндовый php (иначе виндовый php не найдет cygwin-ский файл /home/galymzhan/phpsh).
Запускается просто: заходим в нужную папку и набираем ./phpsh
Чтобы напечатать значение выражения, надо ставить перед ним знак =
Работа с ctags:
Кстати, при fatal error phpsh просто перезапускается :)
Итоги...
подводить трудно, так как я так и не смог посмотреть как инструменты работают в linux-е (ввиду отсутствия установленной ОС на работе). Тем более есть еще и другие альтернативы:
- php interactive console - php-скрипт, обязательно наличие readline.
- phpa-norl - тоже что и phpa, только под windows. Автор утверждает, что вырезал все readline-ские функции
На мой взгляд, лучшим является phpsh - единственный, который нормально заработал под windows (хоть и с небольшим шаманством), и обладающий всеми нужными возможностями.