命名空间的理解
类似于分区域 / 领域。区域外的东西不影响内部,
类(包括抽象类和traits)、接口、函数和常量 的名称不受外部影响
命名空间的定义:
可以普通定义,打一个名字上去。
可以目录结构的形式定义
namespace MyProject
namespace MyProject\Sub\Level;
同一个文件内定义多个命名空间
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
?>
使用命名空间:
命名空间内 可以直接调用内部 函数、class
命名空间内 可以相对路径的形式调用 子空间里的 函数参数; 参考 PHP引用文件 和 图片的相对路劲
命名空间内 可以直接加上完整的 空间名称
namespace Foo\Bar\subnamespace;
namespace Foo\Bar
staticmethod();
subnamespace\staticmethod();
\Foo\Bar\staticmethod();
获取当前命名空间
__NAMESPACE__ // 打印出命名空间完整路径
namespace // 可调用当前命名空间里的函数, 例如: namespace\func();
use 和 命名空间
a. use 没有引入文件的功能
b. use 是引用命名空间里的 class
例如: 你有2个文件:
A.php
<?php
namespace Foo\Bar;
class classname{
}
?>
B.php
<?php
require_once('A.php');
use Foo\Bar\classname;
new classname();
?>
结论:
require_once('A.php');
use Foo\Bar\classname as name;
new name();
和
new Foo\Bar\classname();
和
use Foo\Bar\classname;
new classname();
三者是一样的效果
全局空间:
没有定义命名空间, 那么所有的 function 或者 class 就处于全局空间中( 也就是我们平时 正常的代码 )
名称前加上前缀 \ 表示该名称是全局空间中的名称, 例如:
\func(); // 表示调用非命名空间中的 func() 函数
constant('constname'); // 可以指定命名空间路径
使用命名空间: 后备全局函数/常量
未完待续……