因此,在我的router.php文件中,我使用命名空间创建了一个runApp
类的对象。一切都很好。
namespace Router;
// app/routes.php
$runApp= new \Core\runApp();
在这种情况下,反斜杠(new \ Core \ runApp())意味着我需要从我的命名空间Router
查找并尝试在runApp
命名空间中查找Core
类。
但是,我也可以这样使用链接:
namespace Router;
use Core\runApp;
// app/routes.php
$runApp= new runApp();
但是,为什么在最后一种情况下我不需要设置\
befor命名空间(使用Core \ runApp)??
答案 0 :(得分:1)
请注意,对于命名空间名称(包含命名空间分隔符的完全限定的命名空间名称,例如Foo \ Bar而不是全局名称,例如FooBar),前导反斜杠是不必要的,不建议使用,因为导入名称必须是完全限定,并且不会相对于当前名称空间进行处理。
来自PHP - Using namespaces: Aliasing/Importing
当您使用use
关键字时,名称空间不是相对的,它们必须是完全限定的
然而,在所有其他情况下,它与当前命名空间相关。
答案 1 :(得分:1)
使用"使用"声明你为你的班级定义了一个别名" runapp"。 所以它在PHP文件中可用。
如果你想解决一个类"在"之外,你只需要一个完整的命名空间类。并且它没有在使用声明中定义(以前别名)。
将use-statement视为快捷方式。
答案 2 :(得分:1)
\
用于全局命名空间。
在第一个示例中,您不在全局命名空间中,而是位于Router
命名空间中。如果要使用其他命名空间中的类,可以:
如果你在第二个例子$runApp = new \runApp()
中写道,你将使用全局命名空间中的runApp类,它不存在。
当您有两个具有相同名称的类时,它很有用。示例:
use \Fooo\Bar;
$a = new \Foo\Bar(); // $a is a \Foo\Bar
$b = new Bar(); // $b is a \Fooo\Bar