命名空间与自动加载系列(三)--命名空间的使用

作者: 温新

分类: 【PHP基础】

阅读: 1710

时间: 2021-05-17 11:23:29

前面了解了如何声明命名空间,那么接下来就是学习怎么使用命名空间。在了解命名空间之前,先来了解一下如何打一个文件,我这里以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.phplaravel/Post.phpPost.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

请登录后再评论