【问题标题】:Use variable as namespace使用变量作为命名空间
【发布时间】:2014-12-15 20:50:21
【问题描述】:

在其他文件中(例如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 语句中使用变量?还是用这种方法避免使用语句更好?

【问题讨论】:

  • 如果不是缩短或重命名namespace+class,让代码更清晰,还有什么用呢?您的代码永远不会清晰,无论如何您都可以将整个命名空间+类保存在一个变量中。

标签: php class namespaces using


【解决方案1】:

在编译时执行导入。

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

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

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

$UserSpecificClass = new $c();

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2017-05-20
    • 2019-04-11
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多