我以前学过PHP中的命名空间使用,但最近看到一个项目使用了
我想问这是否是使用命名空间的正确方式?还是我遗漏了什么?
文件:index.php
use
关键字,然后访问带有命名空间的对象,就像它们是普通的没有命名空间一样。我的问题是,下面的代码是否正确,它有一个文件index.php
并使用了命名空间MyLibrary\Base
,然后使用use
引入了\MyLibrary\Registry
、\MyLibrary\User
和\MyLibrary\Request
。然后可以访问这些对象,而不需要在它们前面加上命名空间,在use
部分以下的实际代码看起来像一个普通的PHP文件(没有命名空间)。我想问这是否是使用命名空间的正确方式?还是我遗漏了什么?
文件:index.php
<?php
namespace MyLibrary\Base;
use \MyLibrary\Registry;
use \MyLibrary\User;
use \MyLibrary\Request;
class Base
{
public $registry;
function __construct($registry)
{
$this->registry = $registry;
$this->user = New User;
$this->request = new Request;
# code...
}
}
?>
文件:registry.class.php
<?php
namespace MyLibrary\Registry;
class Registry
{
public $user;
function __construct($user)
{
$this->user = $user;
# code...
}
}
?>
\\
分隔符。这让我想起了Python,你必须导入库的方式。 - JasonDavisusing System;
using System.Collections.Generic;
等等... 我只是没有意识到他们正在导入命名空间。我也可以看出用点/句号作为NS分隔符会更好看。 - JasonDavisuse \MyFirstNamespace\Foo as Bar;
我知道你可以这样更改名称,但在我看到的代码中,他们像我的例子一样做了...use \MyFirstNamespace\Foo;
然后只需使用Foo
访问,这是可能的吗?请注意,我没有将其设置为其他任何内容,或者您是否必须像这样设置它use \MyFirstNamespace\Foo as Foo;
? - JasonDavisuse \Foo\Bar\MyClass
和use \Foo\Bar\MyClass as MyClass
是一样的。你完全可以选择是否设置别名。在大多数情况下,我也不会这样做 ;) - KingCrunch