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();')
Да, это хак, но удобный.:)