加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php命名空间的理解

发布时间:2022-12-03 15:02:35 所属栏目:PHP教程 来源:未知
导读: 命名空间概述
这是只是大概讲一下用法,如果想详细了解,还是阅读官方手册比较好。
什么是命名空间?从广义上来说PHP命名空间,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽

命名空间概述

这是只是大概讲一下用法,如果想详细了解,还是阅读官方手册比较好。

什么是命名空间?从广义上来说PHP命名空间,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。

版本要求

php5.3.0以上,包含php5.3.0

开始讲解

新建a.php,b.php文件

## 这是a.php
namespace a\b\c; // 说明这个类存在于 a\b\c 这个命名空间下
class Apple{
    function get_func(){
        echo 'This is a';
    }
}

## 这是b.php
namespace a\b\d; // 说明这个类存在于 a\b\d 这个命名空间下
class Apple{
    function get_func(){
        echo 'This is b';
    }
}

我们再新建一个test.php去调用上面这两个类

## 这是test.php
require_once "./a.php";
require_once "./b.php"; 
// 如果没有命名空间,直接引入,会报类重复的错误
// 那我们该如何实例化上面类呢?
$apple_a = new a\b\c\Apple();
echo $apple_a->get_func(); // This is a
// 这种方法是可以的,但是试想如果我们同个页面要多次实例化此类,这样是非常耗资源的。

## 这是test.php
require_once "./a.php";
require_once "./b.php"; 
use a\b\c\Apple;
$apple_a = new Apple();
$apple_a1 = new Apple();
$apple_a2 = new Apple();
echo $apple_a->get_func(); // This is a
echo $apple_a1->get_func(); // This is a
echo $apple_a2->get_func(); // This is a
// 这样写同样也是可以的,而且会比上面那种方法省资源
// 在这里思考一下,如果想执行b.php文件的类,该怎么执行呢?

## 这是test.php
require_once "./a.php";
require_once "./b.php"; 
use a\b\c\Apple;
$apple_a = new Apple();
.....(此处省略,上面重复).....
$apple_b = new a\b\d\Apple();
echo $apple_b->get_func(); // This is b
// 如果我们也像使用上面那种方法引入b.php文件的类,该如何做到呢?

## 这是test.php
require_once "./a.php";
require_once "./b.php"; 
use a\b\c\Apple;
use a\b\d\Apple as BApple; // 如果想两个同名的类一起使用,就得给它赋个新类名
$apple_a = new Apple();
echo $apple_a->get_func(); // This is a
$apple_b = new BApple();
echo $apple_b->get_func(); // This is b
// 同样,这也成功输出了

这时我们新建一个c.php文件

## 这是c.php
class Apple{
    function get_func(){
        echo 'This is c';
    }
}
// 我们没有在这个类文件下配命名空间

## 这是test.php
require_once "./a.php";
require_once "./b.php";
require_once "./c.php";
use a\b\c\Apple;
.....(此处省略,上面重复).....
// 如果没有配命名空间,代表根类,就得这样实例化,就可以成功找到了
$apple_c = new \Apple();
$apple_c->get_func(); // This is c

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!