以下引发错误,说明Exception无法重新声明.
namespace \NYTD\ReadingListBackend;
class Exception extends \Exception
{
}
Run Code Online (Sandbox Code Playgroud)
但是,删除\名称空间声明中的前缀不会:
namespace NYTD\ReadingListBackend;
Run Code Online (Sandbox Code Playgroud)
我最近采用了PHP命名空间.我的理解是前缀的名称空间\代表一个完全限定的名称.
那么为什么我不能在命名空间声明中使用前缀呢?我可以在引用时(例如new \NYTD\ReadingListBackend\Exception).希望得到完整的解释,因为我在文档中找不到任何内容.
正如其他答案中所提到的,namespace声明总是采用完全限定的名称,因此尾随\将是多余的,不允许.
写入namespace \NYTD\ReadingListBackend { ... }将导致正确的解析错误.
namespace \NYTD\ReadingListBackend;另一方面,当使用分号表示法时,它被解释为namespace\NYTD\ReadingListBackend;,这是对常量的访问NYTD\ReadingListBackend(namespace此处的关键字解析为当前活动的命名空间,在您的情况下是全局命名空间).
因此,您的代码不会声明任何命名空间(它是全局的),只是尝试访问常量.这就是你最终重新定义的原因Exception.
顺便说一句,未定义的常量访问不会引发致命错误的原因是类提升.首先评估您的类声明,因此PHP实际上永远不会达到常量访问(即使它首先出现在代码中).
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |