My\Namespace \My\Namespace
所以,我应该使用哪一个,我看到php文档主要使用My\Namespace。
但是据说\My\Namespace更好,因为它是明确的,而My\Namespace可以被解析为\RandomNamespace\My\Namespace。
在阅读之后,我开始对此感到好奇,在第2条关于这个的理论中有一个问题:"请将代码和文档中的'Doctrine\XXX\YYY‘替换为'\Doctrine\XXX\YYY’“
你还有更多关于这件事的信息吗?谢谢
发布于 2011-04-08 22:22:13
这与使用相对的和绝对的文件/uri路径没有什么不同,可以归结为首选项。但是,与绝对路径不同,我同意不那么含糊的\My\Namespace,因为它永远不会中断,相对命名空间可以这样做。
名称空间别名,通过use添加相对命名空间名称的能力。例如,我可以说:use \PDO as YourMom,然后在代码中调用YourMom。被调用的是\PDO、\YourMOM还是YourMom?显然,在没有冲突的情况下,别名获胜并被解析为\PDO,但这使得代码很难理解。
编辑
可以通过代码示例来证明非依赖性。如果名称空间没有限定,请确保您看到应用了全局退却。
正如@netcoder所提到的,在名称空间的声明中不可能是独立的。因此,namespace My和namespace \My (或交换下面任何其他名称空间声明)与完全限定名称空间的声明完全相同。
namespace My
{
}
namespace My\Other
{
use Bob; // Resolves to \My\Other\Bob
}
namespace My\Other\NS
{
use \My\Other as Other;
use Other\NS as Duh; // This resolves to \My\Other\NS
}
namespace My\Other\Bob
{
use Other\NS as Duh; // This resolves to \Other\NS becuase the namespace doesn't exist inside \My\Other\Bob
}发布于 2011-04-09 01:02:18
在名称空间声明本身中,它没有任何区别。此声明总是定义一个完整的限定名,因此您可以安全地省略前面的命名空间分隔符。对于use语句也是如此。
namespace My\Namespace;
// Is exactly the same as
namespace \My\Namespace;
use Foo\Bar as Class1;
// Is exactly the same as
use \Foo\Bar as Class2;在所有其他情况下,前导分隔符确保给定的限定符是绝对的,如果缺少,则是相对的。有关如何解决这些问题,请参见手册。
如果您只使用来自同一个命名空间的类和/或通过use (或者as)“声明”文件顶部的每个类,则可以安全地使用相对类标识符。
发布于 2011-04-20 10:18:58
其实是有区别的,但也不总是(啊对)。
在use构造中,您不必“提到”领先的\。如果类位于同一个命名空间中,或者使用导入(与use ns一起导入),则无需内联。
但有时你必须:
namespace foo;
class bar extends \baz\Bar {您使用的是未定义/未知/未导入的内联类,因此必须提到它的源代码。
另一个示例是在名称空间中使用的未命名空间类,内联:
namespace foo;
$dt = new \DateTime;最佳实践(通常)是导入当前文件所需的所有类。use语句非常非常便宜,所以不要退缩。
namespace foo;
use baz\Bar AS OtherBar;
use \DateTime;
class Bar extends OtherBar { // or something like that; in this case (same class name) it's tricky
function __construct() {
$dt = new DateTime;编辑1
此外,在将名称空间作为字符串传递时,不要忘记使用完全名称空间的类名,尽管您可能位于正确的命名空间中:
namespace foo;
$class = 'foo\bar';https://stackoverflow.com/questions/5601123
复制相似问题