Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
21:47, 14 июля 2010

Интерактивные shell’ы для PHP

Программисты 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-ы для классов, методов и функции, для этого надо набрать ? и имя класса.

PHP Shell

Отлавливание ошибки:

PHP Shell

В целом неплохая штука, на мой взгляд более лучше чем два предыдущих.

phpsh

http://www.phpsh.org/

Был сотворен в недрах facebook. Имеет автодополнение, историю команд даже между сессиями(!), просмотр документации. Более того, phpsh интегрируется с ctags - это позволит использовать все его фичи для ваших собственных классов, функции и т.д, т.е. загрузить ваш собственный codebase.

В анонсе разработчики утверждают, что phpsh работает везде, где работает python2.4 с модулем subprocess и, опять же :), GNU readline, т.е. Linux и OSX, но не Windows. Требования для python: pysqlite, readline. Мне удалось запустить phpsh под cygwin, для этого пришлось изрядно постараться:

  1. Сначала ставим последнюю версию cygwin.
  2. В установщике ставим пакеты python и gcc (нужен для сборки pysqlite).
  3. Запустив cygwin, для python ставим пакеты readline (ставится легко через easy_install) и pysqlite (придется собрать из исходников, что в свою очередь потребует скачать исходники sqlite)
  4. Устанавливаем php (cli) под windows, т.к. под cygwin мне так и не удалось поставить php (да это и не нужно в принципе).
  5. Качаем phpsh, распаковываем, меняем кое-что в питоновском файле phpsh, чтобы он использовал виндовый php (иначе виндовый php не найдет cygwin-ский файл /home/galymzhan/phpsh).

Запускается просто: заходим в нужную папку и набираем ./phpsh

Чтобы напечатать значение выражения, надо ставить перед ним знак =

phpsh

Работа с ctags:

phpsh

Кстати, при fatal error phpsh просто перезапускается :)

Итоги...

подводить трудно, так как я так и не смог посмотреть как инструменты работают в linux-е (ввиду отсутствия установленной ОС на работе). Тем более есть еще и другие альтернативы:

  • php interactive console - php-скрипт, обязательно наличие readline.
  • phpa-norl - тоже что и phpa, только под windows. Автор утверждает, что вырезал все readline-ские функции

На мой взгляд, лучшим является phpsh - единственный, который нормально заработал под windows (хоть и с небольшим шаманством), и обладающий всеми нужными возможностями.

0
1098
0