将变量用作命名空间

时间:2014-12-15 20:50:22

标签: php class namespaces using

在其他一些文件中(例如someusername\classes\MyClass),我有

<?php
namespace someusername;
class MyClass
{
  static function Test()
  {
    echo "working";
  }
}
?>

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

<?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();
?>

我可以通过以下方式解决这个问题,但是使用声明可以使事情变得更好

<?php

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

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

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

$UserSpecificClass = new $c();
?>

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

1 个答案:

答案 0 :(得分:2)

导入在编译时执行。

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

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

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

$UserSpecificClass = new $c();