REPL/interactive shell是否支持PHP 5.3?

Mar*_*ies 10 php shell read-eval-print-loop phpsh

我一直在使用phpsh一段时间了,过去它运行得很好.但它的命名空间支持仍然不是很好,这可能非常令人沮丧.

\Somespace\Someclass::someStaticFunction()在没有禁用检查是否存在方法的情况下,这样做是行不通的,这会导致重置环境的拼写错误导致频繁的致命错误.

有多个PHP REPL,包括PHP内置shell(php -a),使用起来很糟糕.

有没有人知道一个替代方案或者一个具有正确名称空间支持的phpsh-fork?或者也许是一个简单的配置修复我忽略了......


一个例子:

这个测试文件:

<?
namespace testing;

function echoSome(){
        echo 'Something';
}

\testing\echoSome();
Run Code Online (Sandbox Code Playgroud)

在phpsh中生成此输出(如预期的那样)

php> include '/path/test.php';
Something
php>
Run Code Online (Sandbox Code Playgroud)

但是再次尝试相同的调用不起作用:

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

没有命名空间,该功能仍然可用:

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

echoSome();
Run Code Online (Sandbox Code Playgroud)

在phpsh中:

php> include '/path/test.php';
Something
Run Code Online (Sandbox Code Playgroud)

电话仍然有效:

php> echoSome();
Something
Run Code Online (Sandbox Code Playgroud)

Doa*_*Doa 2

有几种选择。

首先,您可能想尝试 PHP 5.4 的 CLI。据称,5.4 的交互式控制台得到了极大的改进。他们可能同意你的观点,他们的内置外壳很难使用:)我所知道的是它已经被“翻新”了。

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

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

祝你好运

  • 是的,事实证明我没有正确测试 git 版本。看起来,它支持“\namespace\foo::bar()”就好,只是不接受 PHP 本身*接受的“namespace\foo::bar()”。这只是一个小小的不便,所以我似乎太快地放弃了 git 版本。我将此标记为答案:) (2认同)