REPL/интерактивная оболочка с поддержкой PHP 5.3?

Я использовал phpsh какое-то время, и в прошлом он отлично работал. Но его поддержка пространства имен все еще не очень хороша, и это может быть довольно неприятно.

Такие вещи, как \Somespace\Someclass::someStaticFunction(), не работают, не отключая проверку того, существует или нет метод, что приводит к частым фатальным ошибкам при опечатках, которые reset ваша среда.

Существует несколько PHP REPL, включая встроенную оболочку PHP (php -a), что ужасно использовать.

Кто-нибудь знает альтернативу или, возможно, phpsh-fork с надлежащей поддержкой пространства имен? Или, может быть, простое исправление конфигурации, которое я забыл...


пример:

Этот тестовый файл:

<?
namespace testing;

function echoSome(){
        echo 'Something';
}

\testing\echoSome();

производит этот вывод в phpsh (как ожидалось)

php> include '/path/test.php';
Something
php>

Но повторная попытка повторного вызова не работает:

php> \testing\echoSome();
Not executing input: Possible call to undefined function echoSome()
See /etc/phpsh/config.sample to disable UndefinedFunctionCheck.

без пространств имен функция все еще доступна:

<?
function echoSome(){
        echo 'Something';
}

echoSome();

в phpsh:

php> include '/path/test.php';
Something

и вызов все еще работает:

php> echoSome();
Something

Ответ 1

Существует несколько альтернатив.

Прежде всего, вы можете попробовать CLI для PHP 5.4. Как утверждается, интерактивная консоль была значительно улучшена для 5.4. Вероятно, они согласились с вами, что их встроенная оболочка была ужасной для использования:) Все, что я знаю, это то, что она была "восстановлена".

Существует несколько альтернатив, таких как phpa, которые выглядят довольно устаревшими и работают с последними git версия phph. Они знают о проблемах с пространством имен, судя по их странице "Проблемы", поэтому они могут попытаться улучшить это. Поскольку это с открытым исходным кодом, вы можете заставить кого-то исправить это для вас или исправить самостоятельно: -)

Я думаю, в целом вы столкнулись с выбором между обычным PHP CLI или phpsh. Нет альтернатив, достаточно зрелых, чтобы делать то, что они могут сделать, и большинство альтернатив еще более устарели (т.е. php_repl, который был обновлен 3 года назад, в отличие от phph 2 года).

Удачи.

Ответ 2

Я обнаружил, что использование eval работает как хороший способ:

php> = eval('return \testing\echoSome();')

Да, это хак, но удобный.:)