Php 从命名空间导出类

Php 从命名空间导出类,php,namespaces,Php,Namespaces,我给一个类命名,以利用别名为一些长类名提供速记: namespace some_namespace; use \VeryLongClassnameWhichIUseOften as Short; class MyClass { public static method do_stuff() { Short::do_something(Short::do_other_stuff()); } } 现在有一些第三方代码需要在全局名称空间中使用MyClass 我是否可以将MyCl

我给一个类命名,以利用别名为一些长类名提供速记:

namespace some_namespace;
use \VeryLongClassnameWhichIUseOften as Short;

class MyClass {
  public static method do_stuff() {

    Short::do_something(Short::do_other_stuff());

  }
}
现在有一些第三方代码需要在全局名称空间中使用
MyClass

我是否可以将
MyClass
导出到全局命名空间

我试过了

class \MyClass {
  ...
}
但显然这是不允许的(意外的T_NS_分隔符,应为T_字符串)

我也试过:

namespace some_namespace {
  use \VeryLongClassnameWhichIUseOften as Short;

  class MyClass {
    ...
  }
}

namespace {
  use \some_namespace\MyClass as MyClass;
}

这不会引发任何其他错误,但MyClass在全局命名空间中仍然不可用(未找到类“MyClass”)。我不太明白为什么。

将其放在您的全局命名空间中:

use \some_namespace\MyClass as MyClass;
我相信它应该起作用

编辑:它没有。这应该起作用:

class_alias('\some_namespace\MyClass', 'MyClass');

第三方代码希望您的用户定义类位于全局命名空间中?是的,这是一个插件系统,我可以在其中选择类名,但不能选择命名空间。它是如何工作的?您在哪里定义它应该使用哪个类?如果是某个配置文件或其他东西,您是否尝试过将值设置为
\MyNamespace\MyClass
?未找到类'MyNamespaceMyClass',这是有效的:调查差异……啊,是的,它不起作用。您是否尝试过
class\u别名('\some\u namespace\MyClass',MyClass')
?好的,这里是我的结果:
use
方法仅当用法与
MyClass::method()
调用位于同一文件中时才有效。如果它位于带有
类MyClass
定义的文件中,尽管它位于全局命名空间中,但它不起作用。但是,
class\u alias()
方法可以工作-谢谢。)