在PHP中,出现同名函数或是同名类是不被允许的。为防止编程人员在项目中定义的类名或函数名出现重复冲突,在PHP5.3中引入了命名空间这一概念。

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

在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

命名空间语法示例:

<?php
namespace my\name; // 参考 "定义命名空间" 小节class MyClass {}
function myfunction() {}
const MYCONST = 1;$a = new MyClass;
$c = new \my\name\MyClass; // 参考 "全局空间" 小节$a = strlen('hi'); // 参考 "使用命名空间:后备全局函数/常量" 小节$d = namespace\MYCONST; // 参考 "namespace操作符和__NAMESPACE__常量” 小节$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // 参考 "命名空间和动态语言特征" 小节
?>

1.命名空间,即将代码划分成不同空间,不同空间的类名相互独立,互不冲突。一个php文件中可以存在多个命名空间,第一个命名空间前不能有任何代码。内容空间声明后的代码便属于这个命名空间,例如:

<?phpecho 111;       //由于namespace前有代码而报错namespace Teacher;class Person{function __construct(){echo 'Please study!';}}

2.调用不同空间内类或方法需写明命名空间。例如:

<?phpnamespace Teacher;class Person{function __construct(){echo 'Please study!<br/>';}}function Person(){return 'You must stay here!';};namespace Student;class Person{function __construct(){echo 'I want to play!<br/>';}}new Person();                    //本空间(Student空间)new \Teacher\Person();           //Teacher空间new \Student\Person();           //Student空间echo \Teacher\Person();          //Teacher空间下Person函数//输出:I want to play!Please study!I want to play!You must stay here!

3.在命名空间内引入其他文件不会属于本命名空间,而属于公共空间或是文件中本身定义的命名空间。例:

首先定义一个1.php和2.php文件:

<?php     //1.php
class Person{function __construct(){echo 'I am one!<br/>';}
}
<?php
namespace Newer;
require_once './1.php';
new Person();      //报错,找不到Person;
new \Person();     //输出 I am tow!;
<?php     //2.php
namespace Two
class Person{function __construct(){echo 'I am tow!<br/>';}
}
<?php
namespace New;
require_once './2.php';
new Person();      //报错,(当前空间)找不到Person;
new \Person();     //报错,(公共空间)找不到Person;
new \Two\Person();  //输出 I am tow!;

4.下面我们来看use的使用方法:(use以后引用可简写)

 namespace School\Parents;class Man{function __construct(){echo 'Listen to teachers!<br/>';}}namespace School\Teacher;class Person{function __construct(){echo 'Please study!<br/>';}}namespace School\Student;class Person{function __construct(){echo 'I want to play!<br/>';}}new Person();                   //输出I want to play!new \School\Teacher\Person();   //输出Please study!new Teacher\Person();           //报错----------use School\Teacher;  new Teacher\Person();           //输出Please study!    ----------use School\Teacher as Tc;  new Tc\Person();           //输出Please study!  ----------use \School\Teacher\Person; new Person();           //报错----------use \School\Parent\Man; new Man();           //报错

参考教程:

PHP 命名空间(namespace)

PHP命名空间(Namespace)的使用详解

PHP命名空间 namespace 及导入 use 的用法

欢迎关注我的公众号

PHP命名空间 namespace 及 use 的用法相关推荐

  1. php namespace原理作用,php 命名空间(namespace)原理与用法实例小结

    本文实例讲述了php 命名空间(namespace)原理与用法.分享给大家供大家参考,具体如下: 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致 ...

  2. nacos命名空间namespace用法

    eureka用作注册中心,如果有多套环境的时候,通常须要部署多套eureka注册中心代码.nacos用作注册中心时,增加一个命名空间namespace的概念,可以用一套nacos注册中心去管理多套不同 ...

  3. PHP命名空间(Namespace)的使用详解(转)

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

  4. PHP命令空间namespace及use的用法实践总结

    以下皆为本人自我理解内容,如有失误之处,请多多包涵. 文章大纲: 使用namespace的目的 namespace的使用方法 使用use的目的 use的使用方法 使用namespace的目的: 团队合 ...

  5. PHP命名空间(Namespace)的使用详解

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

  6. Nacos 配置分组 Group,命名空间Namespace和配置集DataId

    配置集( Data ID) 一组相关或者不相关的配置项的集合称为配置集.在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置.例如,一个配置集可能包含了数据源.线程池.日志级别等配置项. ...

  7. C++中的命名空间namespace

    1.Cpp中的命名空间 假设这样一种情况,当一个班上有两个名叫Zara的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等.同样的情况, ...

  8. PHP 命名空间(namespace)

    2019独角兽企业重金招聘Python工程师标准>>> PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Ja ...

  9. 为 Vue3 学点 TypeScript, 命名空间(namespace)是什么?

    往期目录 第一课, 体验typescript 第二课, 基础类型和入门高级类型 第三课, 泛型 第四课, 解读高级类型 第五课, 命名空间(namespace)是什么 什么时候要用命名空间? 如果你发 ...

  10. php命名空间 动态 new,PHP命名空间(namespace)的动态访问及使用技巧_php实例

    PHP的命名空间(namespace)是PHP 5.3中加入最重要的一个新特性,这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的. 一.动态访问命名空间的元素 na ...

最新文章

  1. Anaconda 安装 opencv3(Win10)
  2. Grafana 6.4 正式发布!
  3. lua学习笔记之闭包
  4. apue学习笔记(第三章 文件I/O)
  5. Redis 数据库结构设计
  6. PHP实现图片压缩的两则实例(转)
  7. aspnet_regsql在哪里 怎么运行它 以及功能介绍
  8. 课程上线 -“新手入门 : Windows Phone 8.1 开发”
  9. android 开发 短信,Android开发之短信发送
  10. java正则表达式提取字符串中的数字
  11. MySQL命令梳理_MySQL操作命令梳理(2)
  12. PyPyODBC 0.9.2发布 - 纯Python实现的pyodbc替代库
  13. mybatis 添加语句返回对象_Mybatis底层源码分析
  14. Unix Vi 命令详解
  15. 缓存雪崩处理方法-双缓存思路
  16. Win7 本地打印后台处理程序服务没有运 怎么办
  17. UTF-8与GBK字符之间的转换
  18. 图示-实现hive的文件与hdfs的导入导出
  19. 新手坐高铁怎么找车厢_坐高铁时如何快速找到自己车票上的车厢和座位! 说出来你都不敢相信...
  20. 让更多人用到自己的代码,让信仰在风中飘扬

热门文章

  1. eregi php7.0,关于php:已弃用:函数eregi()已弃用
  2. python修改像素
  3. c语言随机迷宫生成,程序自动生成迷宫
  4. KUKA库卡机器人零点失效维修案例
  5. 掉头发厉害,是为什么呢?
  6. 4309 消灭老鼠(哈希表存储一个向量表示一条直线)
  7. 悲剧的购物经历(附:最好不要买响尾蛇3G)
  8. c语言提示函数已有主体,C++中的函数名称粉碎机制和它的逆向应用 筋斗云网络...
  9. 网卡的HWADDR和MACADDR的区别?
  10. 信创项目基础软件都包括哪些?你要了解