出于某种原因,这个代码在文件中
<?php
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\HttpFoundation\Request;
var_dump(new Request);
工作和打印:
object(Symfony\Component\HttpFoundation\Request)#3 (23) {
["attributes"]=>
object(Symfony\Component\HttpFoundation\ParameterBag)#5 (1) {
["parameters":protected]=>
array(0) {
}
}
["request"]=>
...
但是在REPL(php -a
)中它会发出错误:
$ php -a
Interactive shell
php > require __DIR__ . '/vendor/autoload.php';
php > use Symfony\Component\HttpFoundation\Request;
php > var_dump(new Request);
Warning: Uncaught Error: Class 'Request' not found in php shell code:1
Stack trace:
#0 {main}
thrown in php shell code on line 1
我想知道为什么。
答案 0 :(得分:1)
use
语句似乎只影响当前的“命令”,并且在执行后无法识别。
单一命令:
php > use Foo\Bar\Baz; var_dump(Baz::class);
string(11) "Foo\Bar\Baz"
两个命令:
php > use Foo\Bar\Baz;
php > var_dump(Baz::class);
string(3) "Baz"
您可以通过将其包装在命名空间中来延迟执行,例如:
php > namespace Qux {
php { use Foo\Bar\Baz;
php { var_dump(Baz::class);
php { }
string(11) "Foo\Bar\Baz"
php >