关于命名空间:PHP中的命名空间

47次阅读

共计 1322 个字符,预计需要花费 4 分钟才能阅读完成。

命名空间(英语:Namespace)示意标识符(identifier)的可见范畴。一个标识符可在多个命名空间中定义,它在不同命名空间中的含意是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。

简略说来命名空间是为了解决不同库在同一个环境下应用时呈现的命名抵触。例如我本人有一个函数名叫 A,然而零碎曾经有一个 A 函数了,那就会呈现抵触。

PHP 中的命名空间

PHP 从 5.3 版本开始引入了命名空间,之后许多现有 PHP 类库以及框架都开始反对它。那么 PHP 的命名空间怎么用呢?
定义命名空间
上面是一个定义命名空间的例子

<?php
//file a.php
namespace A;

const test = ‘Atest’;

function test() {
return __FUNCTION__;
}

class Test{
public function __construct(){

   return __METHOD__;

}
}
?>

下面例子中就是一个典型的命名空间定义方法,只有 const, function, class 受命名空间的束缚
应用命名空间
应用命名空间的形式如下:

<?php
namespace B;
use A;

const test = ‘Btest’;
function test() {
return __FUNCTION__;
}

class Test{
public function __construct(){

   return __METHOD__;

}
}

include “a.php”;// 必须蕴含 A 命名空间的文件

// 齐全限定
// \B\test 从相对地位查找输入,如果是全局函数则\test
echo \B\test; // 输入 Btest

// 限定名称
// 这里曾经通过 use A 申明了在这个文件能够通过 \A\... 应用 A 命名空间的函数
echo A\test; // 输入 Atest

// 非限定名称
// 非限定名称的函数test 会从以后命名控件查找,即 B
echo test; // 输入 Btest

// namespace 关键字代表以后命名空间
echo namespace/test;

首先要留神的是命名空间只起申明作用,也就是在应用了命名空间的时候仍然得把这个命名空间申明的那个文件蕴含进来。在应用中能够通过 NAMESPACE 来查看以后命名空间。

更多内容能够查看 PHP 官网文档
主动加载

每个文件既要申明命名控件又要手动 include 是十分不智能的事件,所以在本人的 PHP 零碎或者框架中能够应用主动加载技术,让零碎本人去找
最简略的形式是利用函数__autoload 函数,然而这个函数只能在非命名控件下定义,也就是全局状况下:

function __autoload($class) {
$dir = ‘./’;
set_include_path(get_include_path().PATH_SEPARATOR.$ids_dir);
$class = str_replace(‘\\’, ‘/’, $class) . ‘.php’;
require_once($class);
}

如果在曾经有了命名空间的类中,能够应用函数 spl_autoload_register 来注册一个类中的办法来代替__autoload

正文完
 0