命名空间的实现跟我们系统目录文件的组织结构形式类似 , 一个目录下只能存在一个db.php文件。namespace关键字就是来定义类的空间区分。
受命名空间影响的类型:类、接口、函数、常量 , 当然define()定义的常量是全局的,不受空间影响。如果使用命名空间定义常量要用 const

  • 注:
    \ 一个反斜杠是指全局命名空间。\venter 这个是指全局命名空间下的其他子命名空间。但是这种情况只是类存在, 因为全局空间函数和常量在子空间调用的时候,如果空间内找不到会继续到全局空间寻找所以子空间内使用全局空间的函数变量, \ 加或不加功能一样。 如果优化的话应该加上 \ 提高效率。
    例如:
  • venter->session->db.php
  • venter->db.php
1.namespace的常规使用

以下为DEMO示例目录结构

-namespace-App-AppIndex.php-lib-LibIndex.php-main.php
 /*** main.php* 通过测试如果不定义命名空间两个Index类包下面这个错误,无法重新声明Index类* Fatal error: Cannot redeclare class Index in D:\phpStudy\WWW\namespace\lib\LibIndex.php*/include_once ('App/AppIndex.php');include_once ('lib/LibIndex.php');/*** AppIndex.php */namespace UserApp;class Index{}/*** LibIndex*/namespace UserLib;class Index{}
没有载入的命名空间不能调用,命名空间是全局的属性

通过加载入口文件main.php载入空间,才能在UserApp\Index里面调用另一个空间的类

输出结果为:这是 UserApp\Index这是 UserLib\Index

 /*** main.php*/include_once ('App/AppIndex.php');include_once ('lib/LibIndex.php');new \UserApp\Index();/*** AppIndex.php */namespace UserApp;class Index{public function __construct(){echo '这是 UserApp\Index';new \UserLib\Index();}}/*** LibIndex*/namespace UserLib;class Index{public function __construct(){echo '这是 UserLib\Index';}}
2. use的使用

常规导入类的名称过于繁琐 , 所以php中提供了一个关键字 use 来导入相应命名空间的类,尤其是导入函数和常量,普通方式不能导入函数常量

 /*** main.php*/include_once ('App/AppIndex.php');include_once ('lib/LibIndex.php');//use 导入空间use  UserApp\Index;//这里可以去掉路径前缀直接使用Index()new Index();/*** AppIndex.php */namespace UserApp;class Index{public function __construct(){echo '这是 UserApp\Index';new \UserLib\Index();}}/*** LibIndex*/namespace UserLib;class Index{public function __construct(){echo '这是 UserLib\Index';}}

注意:PHP 7 之前版本需要使用多次 use

use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C; use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c; use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

PHP 7+ 之后版本可以使用一个 use 导入同一个 namespace 的类

use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
3. 别名as 的使用

如果在空间内use 导入另一个空间,并且两个空间类名相同, 那么为了避免这种类名冲突的问题出现php 里面设置一个as 别名的功能

 /*** main.php*/include_once ('App/AppIndex.php');include_once ('lib/LibIndex.php');use  UserApp\Index;new Index();/*** AppIndex.php */namespace UserApp;//这里直接将类设置别名为LibIndexuse UserLib\Index as LibIndex;class Index{public function __construct(){echo '这是 UserApp\Index';//此处直接调用别名就oknew LibIndex();}}/*** LibIndex*/namespace UserLib;class Index{public function __construct(){echo '这是 UserLib\Index';}}
4.use导入函数、常量
 /*** main.php*/include_once ('App/AppIndex.php');include_once ('lib/LibIndex.php');//use 导入空间use  UserApp\Index;new Index();/*** AppIndex.php */namespace UserApp;use UserLib\Index as LibIndex;//此处调用UserLib空间的函数use function UserLib\userLib;//function关键字要在php5.6以上才能用use  UserLib\userLib;//普通导入//常量的方式类似也可以不用关键词use const UserLib\JXLV;class Index{public function __construct(){echo '这是 UserApp\Index';new LibIndex();userLib();//function关键字导入的函数调用方式\UserLib\userLib();//普通导入函数调用方式echo JXLV;}}/*** LibIndex*/namespace UserLib;class Index{public function __construct(){echo '这是 UserLib\Index';}}//此处是空间的函数function userLib(){echo '我是userlib的函数';}

php命名空间namespace应用相关推荐

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

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

  2. PHP 命名空间(namespace)

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

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

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

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

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

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

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

  6. 【C++ 语言】命名空间 ( namespace | 命名空间定义 | 命名空间嵌套 | 域作用符 | 与 include 对比 )

    文章目录 命名空间简介 自定义命名空间 自定义嵌套命名空间 域作用符 命名空间 与 include 区别 命名空间定义与使用完整代码 命名空间简介 命名空间 ( namespace ) : 1.命名空 ...

  7. C++命名空间namespace

    1.namespace的作用 命名空间namespace是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的重名冲突,不同的命名空间中可以存在名字相同的标识符而不会相互干扰,防止名字污 ...

  8. 【小白学习C++ 教程】十三、C++命名空间namespace

    @Author:Runsen 文章目录 访问命名空间 嵌套命名空间 命名空间别名 任何C++程序都有声明namespace,比如下面的C++程序没有声明namespace int main() {in ...

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

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

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

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

最新文章

  1. https协议原理过程
  2. 运维-nginx +php 错误状态码说明
  3. dx200手环使用方法_硅胶手环的缺点有哪些?
  4. 学点 C 语言(35): 函数 - 递归
  5. adb connect 出现timeout的处理方式
  6. tomcat、腾讯云主机和微信
  7. linux mmap 内存映射【转】
  8. 《高效程序员的45个习惯》-之一
  9. Linux下c开发 之 线程通信(转)
  10. 无线数传电台工业控制的应用
  11. TCP服务端实现并发
  12. JavaScript的求模、取整、小数的取舍
  13. 嵌入式开发环境ARM+linux的搭建
  14. Java内存模型三大特性
  15. 入门快应用的另一种姿势
  16. Java多线程 5 多线程其他知识简要介绍
  17. caffe数据格式(Google Protocol Buffers)
  18. Scrum项目6.0 和8910章读后感
  19. js 修改html编码,Javascript 中对HTML编码和解码的方法
  20. 转:《欢聚时代(多玩YY)IPO招股书》(概要)

热门文章

  1. 光伏逆变器设计资料,原理图,PCB,源代码 DC-DC采用Boost升压,DCAC采用全桥逆变电路结构
  2. android 日期转星座,日期匹配星座,月日匹配星座,android 星座
  3. 关于 Android Studio 鼠标中键的一些技巧
  4. mysql特殊字符转义_MYSQL特殊字符转义
  5. win7无权限连接网络计算机,win7系统出现无权限访问网络的完美解决技巧
  6. java编程计算圆球的体积_已知圆球体积为4/3πr³,试编写一个程序,输入圆球半径,经过计算输出圆球的体积.用JAVA编写的...明天(3月11号)要用....
  7. 面板PSM+DID如何做匹配?
  8. 微信公众号回复消息换行符处理
  9. JAVA初级项目——银行账户管理
  10. SD卡格式化重建分区