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

时间:2011-07-06 08:37:34

标签: php namespaces

我有一个异常类:

namespace abc;

class AbcException extends Exception {
// blah blah
}

它产生了这个错误:

Class 'abc\Exception' not found ...

问题:

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

  2. 赞赏有用的文件。

  3. 感谢您阅读我的问题

5 个答案:

答案 0 :(得分:26)

  

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

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

namespace abc;

class AbcException extends \Exception {
// blah blah
}
  

赞赏有用的文件。

PHP手册中有an entire page专门讨论这个问题!

答案 1 :(得分:15)

Exception类解析为脚本命名空间(PHP Manual),因为它以:

开头
namespace abc;

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

namespace abc;
use Exception;

class AbcException extends Exception {
// blah blah
}

使用此变体,您可以在文件顶部看到“导入”的类。此外,您可以稍后更轻松地更改/别名文件中的每个Exception类。另请参阅Name resolution rules in the PHP Manual

或者,只要指定了类名,就可以指定具体的命名空间。根命名空间为\,因此异常的完全限定类名为\Exception

namespace abc;

class AbcException extends \Exception {
// blah blah
}

然而,这只会在某些地方运行,但它会使您的代码更加绑定到具体的类名,如果代码库增长并且您开始重构代码,则可能不需要这些类名。

答案 2 :(得分:2)

这只是一个黑色的漏洞。喜欢\例外。

答案 3 :(得分:2)

在包含/扩展其他类OR库时使用“use”是件好事。

radGridView1.CurrentRow.Cells[0].Value

答案 4 :(得分:-1)

在 Windows 下,您不需要前导 \ 来表示根命名空间。部署到 *nix 环境后,无论何时使用它,都必须在类名前显式添加 \,或者在使用它们之前为正在使用的每个根命名空间类放置 use 语句,否则会得到一个 class not found 致命错误。