如何使用php的"root"命名空间?

nXq*_*Xqd 25 php namespaces

我有一个Exception类:

namespace abc;

class AbcException extends Exception {
// blah blah
}
Run Code Online (Sandbox Code Playgroud)

它会产生以下错误:

Class 'abc\Exception' not found ...
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我能做些什么来完成这项工作?

  2. 有用的文件表示赞赏.

感谢您阅读我的问题

Lig*_*ica 27

我能做些什么来完成这项工作?

使用前导反斜杠指示全局命名空间:

namespace abc;

class AbcException extends \Exception {
// blah blah
}
Run Code Online (Sandbox Code Playgroud)

有用的文件表示赞赏.

在PHP手册中有一整页专门讨论这个问题!

  • @nXqd:我用google搜索"namespace php",转到第一个结果,然后点击"使用命名空间:回退到全局函数/常量",它完全描述了你想要做的事情!实际上,在开始使用此语言功能之前,您应该在某些时候阅读有关名称空间的_entire_ manual部分. (5认同)
  • @nXqd:振作起来:) (4认同)
  • 感谢Tomalak,我第一次提出这个问题时感到很痛苦.但也许整整一天使用代码会让我蒙羞:P (2认同)

hak*_*kre 17

Exception类解析为脚本命名空间(PHP手册),因为它开始于:

namespace abc;
Run Code Online (Sandbox Code Playgroud)

您可以专门告诉脚本使用哪个例外:

namespace abc;
use Exception;

class AbcException extends Exception {
// blah blah
}
Run Code Online (Sandbox Code Playgroud)

使用此变体,您可以在文件顶部看到"导入"的类.此外,您可以稍后更轻松地更改/别名文件中的每个Exception类.另请参阅PHP手册中的名称解析规则.

或者,您可以在指定类名时指定具体的命名空间.根命名空间是\,因此异常的完全限定类名是\Exception:

namespace abc;

class AbcException extends \Exception {
// blah blah
}
Run Code Online (Sandbox Code Playgroud)

这只是工作,然而,它使您的代码更加绑定到具体的类名,如果代码库增长并且您开始重构代码,则可能不需要这些类名.