如何使用;根“;php的名称空间?

如何使用;根“;php的名称空间?,php,namespaces,Php,Namespaces,我有一个异常类: namespace abc; class AbcException extends Exception { // blah blah } 它会产生以下错误: Class 'abc\Exception' not found ... 问题: 我能做些什么来让它工作 感谢有用的文件 感谢您阅读我的问题这只是一个黑色斜杠。喜欢\例外 我能做些什么来让它工作 使用前导反斜杠指示全局命名空间: namespace abc; class AbcException extends \E

我有一个异常类:

namespace abc;

class AbcException extends Exception {
// blah blah
}
它会产生以下错误:

Class 'abc\Exception' not found ...
问题:

  • 我能做些什么来让它工作

  • 感谢有用的文件


  • 感谢您阅读我的问题

    这只是一个黑色斜杠。喜欢\例外

    我能做些什么来让它工作

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

    namespace abc;
    
    class AbcException extends \Exception {
    // blah blah
    }
    
    感谢有用的文件


    PHP手册中专门介绍了这一点

    异常类将解析为脚本命名空间(),因为它以以下内容开头:

    namespace abc;
    
    您可以明确告诉脚本要使用哪个异常:

    namespace abc;
    use Exception;
    
    class AbcException extends Exception {
    // blah blah
    }
    
    使用此变量,您可以在文件顶部看到“导入”的类。此外,您可以稍后更轻松地更改/别名文件中的每个异常类。另见

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

    namespace abc;
    
    class AbcException extends \Exception {
    // blah blah
    }
    
    但是,这只适用于任何地方,它使您的代码更加绑定到具体的类名,如果代码库增长,并且您开始重构代码,那么可能不需要这些类名。

    在包含/扩展其他类或库时,最好使用“use”

    namespace AbcException;
    use Exception;
    
    class AbcException extends Exception {
        // Your Code
    }
    

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

    谢谢,我不知道手动搜索这个问题的关键是什么:)@nXqd:I在谷歌上搜索“名称空间php”,找到第一个结果,然后点击“使用名称空间:回退到全局函数/常量”,它完全描述了您要做的事情!真的,在开始使用该语言功能之前,您应该在某个时候阅读整个手册中有关名称空间的部分。感谢Tomalak,我第一次提出这个问题时就感到很痛苦。但也许一整天的代码工作让我目瞪口呆:@Tomalak的一个可能的复制品不要根据封面来判断一本书。该问题中的OP问“如何从内部引用不属于名称空间的类?”这与OP的问题完全相同。@Gordon:这当然是高度相关的,并且是在同一主题上,但我认为这两个看起来完全不同,因此将此类作为dup关闭是有害的。这并不是说这个话题已经被一遍又一遍地讨论过了,就像其他一些引起下意识接近投票的话题一样@托马拉克,这不是很相关。答案是“前面加反斜杠”。是的,情况不同,但问题是相同的。就像所有这些问题问如何解析网页中的所有元素一样,这些问题问如何解析网页中的所有LI元素。此外,正如你已经指出的,通过谷歌搜索很容易找到这个问题,因此这个问题无论如何也不是一个真正的问题。@Gordon:答案相同并不意味着问题相同。仅仅因为答案可以在互联网上找到并不意味着它“不是一个真正的问题”。