命名空间与自动加载系列(三)--命名空间的使用
前面了解了如何声明命名空间,那么接下来就是学习怎么使用命名空间。在了解命名空间之前,先来了解一下如何打一个文件,我这里以Linux系统为例,访问文件有三种方式:
文件位置:/home/ziruchu/test.txt;/home/ziruchu/config/url.txt
-
绝对路径名形式。如
cat /home/ziruchu/test.txt
-
相对路径名形式
cd /home/ziruchu cat cat config/conf.txt
cat config/conf.txt表示相对于当前目录,也可以写成
cat ./config/conf.txt
-
相对文件名形式。如
cat test.txt
,也可以写成cat ./test.txt
与文件系统访问一样,PHP 命名空间中的元素使用同样的原理。例如,类名可以通过三种方式引用:
- 非限定名称。
- 限定名称。
- 完全限定名称。
下面用案例进行演示,新建目录 为laravel
项目,其包含三个文件,如下:
文件位置:laravel/index.php
、laravel/Post.php
、Post.php
为每个文件添加内容:
// Post.php
<?php
namespace App\Controller;
class Post
{
public static function index()
{
echo __METHOD__ . PHP_EOL;
}
}
// Common.php
<?php
namespace Common;
class Common
{
public static function index()
{
echo __METHOD__ . PHP_EOL;
}
}
// index.php
<?php
namespace App;
class Index
{
public static function index()
{
echo __METHOD__ . PHP_EOL;
}
}
Post.php与index.php在同一根(App)命名空间中,Common.php自成一根(Common)命名空间。
非限定名称的使用
index.php
文件中,我们来访问根命名空间下index.php
文件中的index
方法。
// index.php
<?php
// 省略重复内容,新增如下内容
index::index(); // 输出App\Index::index
使用非限定名称
index::index
访问时,会自动到App
命名空间中寻找index类中的index方法。简单地说,也就是当前命名空间中寻找该类的方法。
限定名称的使用
// index.php
include './Post.php';
include './Common.php';
Controller\Post::index(); // 输出 App\Controller\Post::index
同理,当使用
Controller\Post::index()
访问时,会自动为其添加上App
。简单地说,还是到当前命名空间下去寻找。
完全限定名称的使用
// index.php
include './Post.php';
include './Common.php';
\Common\Common::index();
这里需要的注意的是,Common与App是同一级的命名空间。现在换成windows下的目录来理解,如laravel目录下有两下目录,分别是app与common。
2021-04-14