【发布时间】:2014-05-11 05:49:54
【问题描述】:
PHP 5.5 引入了简洁的class name resolution method using the ::class syntax。我想这让很多人的生活变得更轻松。它确实对我有用。
但现在我发现自己必须更进一步:获取某个类的命名空间。这不是一项艰巨的编程任务。可以通过字符串操作或数组来实现:
$parts = explode('\\', \Foo\Bar\Baz::class);
array_pop($parts);
return implode('\\', $parts); // returns "Foo\Bar"
但这有点矫枉过正,因为我经常使用它(作为元编程的一种手段)。当我分析应用程序时,它实际上显示为一个瓶颈。有人知道更有效的解决方案吗?
【问题讨论】:
-
回答已删除的评论:
__NAMESPACE__常量会有所帮助,如果您能找到一种在不同命名空间中使用它的方法,而不必从每个文件中返回__NAMESPACE__。 PSR0 在这里不适用,因为我正在做元编程。没有“一个文件=一个命名空间”的规则。即使我确实坚持使用 PSR0,项目文件也由外部自动加载器(Composer)管理。所以我对自动加载过程影响不大。
标签: php metaprogramming