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()
方法可以工作-谢谢。)