我已经研究了PHP中名称空间的使用,但是最近看到一个使用use
关键字的项目,然后像没有名称空间那样访问名称空间对象。这是一个很好的使用PHP中的名称空间的方法
我的问题是,低于正确的代码,它HS文件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,这是你必须导入库的方式。 – JasonDavis 2011-12-22 20:59:08
其实我应该说,它就像C#在哪里他们使用...'使用系统;''使用System.Collections.Generic;'等等......我只是没有意识到他们正在导入命名空间。我还可以看到,使用点/周期作为NS分隔符会有多好。 – JasonDavis 2011-12-22 21:05:05
一个简单的问题,就像你发布'use \ MyFirstNamespace \ Foo'吧';我知道你可以改变这个名字,但是在我看到的代码中,他们像我的例子那样做了......'use \ MyFirstNamespace \ Foo ;'然后通过使用'Foo'访问是可能的?注意我没有设置为其他任何东西,或者你会像这样设置它'use \ MyFirstNamespace \ Foo'作为Foo;'? – JasonDavis 2011-12-22 21:17:33