命名空间
将php代码抽象起来的逻辑空间
在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:
用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
Note:
名为PHP或php的命名空间,以及以这些名字开头的命名空间(例如PHP\Classes)被保留用作语言内核使用,而不应该在用户空间的代码中使用。
定义命名空间
<?php
namespace test;
class A{}
inerface AA{}
trait AAA{}
function B(){}
const C = 5;
命名空间只对class,interface,trait,function,常量起作用,namespace
语句必须放在脚本的第一行,declare
除外。
子命名空间 以
\
隔开同一文件下多个命名空间,使用
{}
分割,不过最好一个文件里一个定义一个空间。方式 以
namespace app\models
举例- 非限定
$a = new ClassName()
相对转换为\app\models\ClassName
- 限定
$a = new backend\ClassName()
相对 转换为\app\models\backend\ClassName()
- 完全限定
$a = new \app\view\ClassName()
绝对 就是app\view\ClassName
- 非限定
动态访问命名空间中 限定和完全限定效果一样
<?php
$class_name1 = "app\models\User";
$class_name2 = "\app\models\User";
$class1 = new $class_name1();
$class2 = new $class_name2();//二者效果一致
别名
use namespace\model as mymodel
然后可以直接用new mymodel()
不定义则是全局空间 用
\
表示