Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用变量作为名称空间_Php_Class_Namespaces_Using - Fatal编程技术网

Php 使用变量作为名称空间

Php 使用变量作为名称空间,php,class,namespaces,using,Php,Class,Namespaces,Using,在另一个文件中(someusername\classes\MyClass),我有 我偶然发现了一个恼人的小障碍: <?php $user = "someusername"; $class = "MyClass"; require_once "$user\\classes\\$class"; //This line should be the equivalent of 'use someusername as User;' use $user as User; //Parse E

在另一个文件中(
someusername\classes\MyClass
),我有


我偶然发现了一个恼人的小障碍:

<?php

$user = "someusername";
$class = "MyClass";

require_once "$user\\classes\\$class";

//This line should be the equivalent of 'use someusername as User;'
use $user as User; //Parse Error: syntax error, unexpected '$user' 

$c = "User\\$class";
$UserSpecificClass = new $c();
?>

我可以通过以下方法来解决这个问题,但是use语句会让事情变得更好

<?php

$user = "someusername";
$class = "MyClass";

require_once "$user\\classes\\$class";

$c = "$user\\$class";

$UserSpecificClass = new $c();
?>


是否可以在PHP中的
use
语句中使用变量?或者用这种方法避免使用use语句更好吗?

导入是在编译时执行的

分配变量是在编译后的运行时完成的,此时应该已经导入任何导入

所以这是不可能的。最好的解决方案确实是在字符串中使用FQN并初始化它

$c = "$user\\$class";

$UserSpecificClass = new $c();

如果不缩短或重命名namespace+类并使代码更清晰,那么它的用途是什么?您的代码永远不会清晰,您可以将整个namespace+类保留在一个变量中。
$c = "$user\\$class";

$UserSpecificClass = new $c();