Correction status:qualified
Teacher's comments:
什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。
例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件foo.txt 可以同时在目录
/home/greg 和
/home/other
中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。
命名空间,即将代码划分成不同空间,不同空间的类名相互独立,互不冲突。一个php文件中可以存在多个命名空间,第一个命名空间前不能有任何代码(否则会报错)。内容空间声明后的代码便属于这个命名空间,例如:
Class类:
<?php /** * Created by PhpStorm. * User: John * Date: 2018/5/9 * Time: 15:41 */ namespace dome1{ class animal { //添加属性 public $type='猫'; //添加方法 function action() { return $this->type.'上树'; } } } namespace dome2{ class animal { public $type='狗'; function action() { return $this->type.'食屎'; } } }
PHP脚本:
<?php /** * Created by PhpStorm. * User: John * Date: 2018/5/9 * Time: 15:48 */ namespace dome1{ class animal { //添加属性 public $type='猫'; //添加方法 function action() { return $this->type.'上树'; } } } namespace cat1{ use dome1\animal as cat; //引入命名空间并使用 as 取别名 class dome { function execute() { //实例化 animal 命名空间中的第一个类 $cat = new cat(); return $cat->action(); } } } namespace catTest { //使用 use 引入命名空间,并使用另外代替 use \cat1\dome as cat; $d = new cat(); //调用输出引入的类的方法 echo $d->execute(); }
测试:
通过引入外部类中的命名空间需要先将其引入,即:require_once 'class/animal.php'; 否则会出现找不到 animal() 的情况
<?php /** * Created by PhpStorm. * User: John * Date: 2018/5/9 * Time: 15:58 */ //通过 require_once 引入其它类中的命名空间中的类进行输出 require_once 'class/animal.php'; //创建狗对象并调用其方法输出 $d = new dome2\animal(); echo $d->action();