PHP命名空间
一:什么是命名空间,命名空间的作用是什么?
先看看官方的解释:
1:用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2:为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
解释比较抽象,我们用例子说明。
二:实例
两个文件:a.php;b.php,类和方法完全一样
a.php
<?php class Test { function send(){ echo 'My is A'; } }b.php
<?php class Test { function send(){ echo 'My is B'; } }再搞个文件,把两个加进去,随便命名:main.php
<?php require('a.php'); require('b.php'); $class = new Test(); $class->send();执行,发现报错:
Fatal error: Cannot declare class Test, because the name is already in use in E:\www\b.php on line 3
啥问题?这里提示重复了,那么怎么解决这个问题?这就是命名空间的目的。
用命名空间解决,修改上面的文件
命名空间就两个符号:namespace,use
a.php
<?php namespace aaa\dog; //加命名空间 格式:\空间名\元素名(随便什么名字都行) class Test { function send(){ echo 'My is A'; } }b.php
<?php namespace bbb\dog; //加命名空间 格式:\空间名\元素名(随便什么名字都行) class Test { function send(){ echo 'My is B'; } }main.php
<?php require('a.php'); require('b.php'); //通过命名空间调用类,如果类用了命名空间,又没有用use,那么new 后面第一个字符必须加 \ 反斜杠 $class = new \aaa\dog\Test(); // 调用a.php $class->send(); $class = new \bbb\dog\Test(); // 调用b.php $class->send();
这样就不会冲突了。这里就用到了namespace,namespace的作用是定义命名空间,那么use是干啥用的?继续介绍。
<?php require('a.php'); require('b.php'); /* use 导入命名空间,use其实就是缩短命名空间,有些命名空间非常长 这里还可以设置一个别名,as 引用更简洁。 */ use aaa\dog as a; // use最后一个dog,两个导入都是一样的,一样会冲突,加别名可以避免 use bbb\dog; $class = new dog\Test(); //省略了前面的 aaa\,看起来也简洁了一点。 $class->send(); $class = new a\Test(); //直接取 as 的简称,更简洁 $class->send();