欢迎使用CSDN-markdown编辑器
来源:互联网 发布:prezi软件破解版 编辑:程序博客网 时间:2024/06/16 04:07
昨天在单位研究pthreads时,需要在框架里进行集成Thread,发现yaf一直报错,后来跟同事一起排查问题,竟然是因为定义了namespace导致的。
一直以来知道命名空间,但没怎么注意过,今天把命名空间进行总结下。
1什么是命名空间
什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。(摘自php官方文档)
而我的理解:命名空间就是一个个家,每个家里的小孩都可以叫李明,放学回家时,李明会回到各自家中,不会出错
2为什么要用命名空间
上面讲了,如果没有命名空间,小朋友都叫李明,老师就没办法知道是那个家长来接孩子了
3受限
虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits)、接口、函数和常量。
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字。
4.实例
正确例子
<?phpnamespace MyProject;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }?>
错误例子
<html><?phpnamespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句?>
定义子命名空间
<?phpnamespace MyProject\Sub\Level;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }?>
PHP 命名空间中的元素使用同样的原理。例如,类名可以通过三种方式引用:
非限定名称,或不包含前缀的类名称,例如
完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。
在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称,例如:
<?phpnamespace A\B\C;class Exception extends \Exception {}$a = new Exception('hi'); // $a 是类 A\B\C\Exception 的一个对象$b = new \Exception('hi'); // $b 是类 Exception 的一个对象$c = new ArrayObject; // 致命错误, 找不到 A\B\C\ArrayObject 类?>
哥们就哭死在这上面
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 第一次机房收费系统--结账
- SqlServer 判断字符是否汉字或数字方法
- 第一篇 Object-C快速入门
- 2017 小米笔试题 编程题 求树的高度 Java代码实现
- CSS float 浮动属性
- 欢迎使用CSDN-markdown编辑器
- Git的忽略文件
- hihoCoder 1389 Sewage Treatment 【二分+网络流+优化】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)
- 【51Nod算法马拉松18 C】数值计算
- 苏打绿 《他夏了夏天》
- python串口
- AndroidStudio中代码模板的使用
- HTML5终极备忘大全(图片版+文字版)
- hdu5800 To My Girlfriend(dp)