博客列表 >跨类调用与命名空间+2018年5月9日16时59分

跨类调用与命名空间+2018年5月9日16时59分

KongLi的博客
KongLi的博客原创
2018年05月09日 16:59:23826浏览

什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。

例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件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();


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议