我可以吗;使用「;PHP';什么是交互式Shell?

我可以吗;使用「;PHP';什么是交互式Shell?,php,interactive-shell,Php,Interactive Shell,假设我在PHP交互式shell中运行以下命令,需要一个实用程序函数文件,其中包含命名空间utils下的所有代码: php>require\u once\uuuuu DIR\uuuuuuu/utils.php'; php>echo\utils\doubleMe(2); 4. php>使用\utils作为u; php>echou\doubleMe(2); PHP警告:未捕获错误:调用PHP shell代码1中未定义的函数u\doubleMe() 堆栈跟踪:。。。 php> 我可以使用完全限定的名称

假设我在PHP交互式shell中运行以下命令,需要一个实用程序函数文件,其中包含命名空间
utils
下的所有代码:

php>require\u once\uuuuu DIR\uuuuuuu/utils.php';
php>echo\utils\doubleMe(2);
4.
php>使用\utils作为u;
php>echou\doubleMe(2);
PHP警告:未捕获错误:调用PHP shell代码1中未定义的函数u\doubleMe()
堆栈跟踪:。。。
php>
我可以使用完全限定的名称空间调用函数,没有问题,但是,当我尝试
使用
/别名名称空间时,就好像从未发生过一样,并尝试在别名名称空间错误下调用函数,说函数未定义


我应该如何
在PHP的交互式Shell中使用
名称空间?如果根本不可能,有什么特别的原因吗?

PHP
use
语句本质上是编译器对缓冲区中的所有代码执行复制粘贴操作。所以

use Foo\Bar\Baz as F;
new F();
变得公正

new \Foo\Bar\Baz();
在它被解释之前

在标准流中,编译器一次操作一个文件,因此use语句应用于给定文件中的所有代码。但是对于交互式shell,缓冲区只包含一行。我在评论中提到了这一点,但正如在中所指出的,运行类似

use \DateTime as D; echo (new D)->format('c');
在交互式shell中,它实际上可以很好地工作,您将看到如下内容

use \DateTime as D; echo (new D)->format('c');
2021-01-11T23:24:55+00:00

然而,将
use
语句放在它自己的行上基本上不会起任何作用;编译器尝试运行其常规的“复制粘贴”例程,但一旦完成,该语句的任何内容都不会保存在内存中,因此未来的行不会受到影响


如果内部团队有足够的动力,我相信这是可以修复的,但我在bug追踪器或,我不认为交互式shell通常是最重要的。希望其他人能提供更多关于这方面的信息,因为我也很好奇,但正如中所指出的,
use
语句确实有效,但前提是它们在同一行中使用。尝试
使用\utils作为u;回声u\doubleMe(2)啊,我以前从未遇到过这个问题;很有趣,但我的想法让它使用更少(哈),不是吗?我很想知道这是为什么。它不像环境(或者你叫它什么)在每一个命令中都被刷新,因为所需文件的函数仍然可以访问。对于那些沮丧地认为这在PHP的交互式shell中不可能实现的人来说,PsySH似乎是一个非常可行的替代品,它确实支持这一点(并提供了更合适的PHP REPL体验)。>我不认为交互式shell通常是最重要的。嗯,很不幸,但我能理解。