10

我使用phpsh已经有一段时间了,过去效果很好。但是它的命名空间支持仍然不是很好,这可能非常令人沮丧。

如果不禁用检查方法是否存在,诸如此类\Somespace\Someclass::someStaticFunction()的事情将无法正常工作,这会导致重置环境的拼写错误频繁出现致命错误。

那里有多个 PHP REPL,包括 PHP 内置的 shell ( 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
4

2 回答 2

3

我发现使用 eval 是一个很好的解决方法:

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

是的,这是一个 hack,但很方便。:)

于 2012-10-17T20:31:15.713 回答
2

有几种选择。

首先,您可能想尝试 PHP 5.4 的 CLI。据称,交互式控制台在 5.4 中得到了极大的改进。他们可能同意您的看法,即他们内置的 shell 使用起来很糟糕:) 我所知道的是它已经“翻新”过。

有一些替代方案,例如phpa,它似乎已经过时了,并且运行最新的git 版本的 phpsh。从他们的“问题”页面来看,他们知道名称空间问题,因此他们可能会尝试改进它。由于它是开源的,您可以找人为您修复它,或者自己修复它;-)

我认为,总的来说,您面临着在普通 PHP CLI 或 phpsh 之间进行选择。没有足够成熟的替代方案可以做任何一个都可以做的事情,而且大多数替代方案甚至更加过时(即,有php_repl,它已在 3 年前更新,而不是 phpsh 的 2 年)。

祝你好运

于 2012-07-11T08:51:48.787 回答