说说PHP中的命名空间相关概念
说说PHP中的命名空间相关概念
什么是命名空间?“从广义上来说,命名空间是一种封装事物的方法。在非常多地方都能够见到这样的抽象概念。
比如。在操作系统中文件夹用来将相关文件分组。对于文件夹中的文件来说,它就扮演了命名空间的角色。详细举个样例,文件 foo.txt 能够同一时候在文件夹/home/greg 和 /home/other 中存在。但在同一个文件夹中不能存在两个 foo.txt 文件。
另外。在文件夹 /home/greg 外訪问 foo.txt 文件时,我们必须将文件夹名以及文件夹分隔符放在文件名称之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。”――命名空间概述
2. PHP命名空间该怎样理解?
从本质上讲,命名空间就是一个容器,这个容器内我们能够放入类、函数和变量。他们在同一命名空间内能够无条件相互訪问。
在命名空间之外,就必须引用或者导入其它命名空间。才干调用它们包括的这些项。
命名空间跟shell中的文件文件夹的概念是一样一样的。在当前文件夹下能够直接用文件名称訪问全部文件,假设须要訪问其它文件夹下的文件,就须要输入相对路径或绝对路径。
引用方式:
namespace foo; class Foo { public function foo() { return \top\namespace\bar\Bar::fuck(); } }
导入方式:
namespace foo; use top\namespace\bar\Bar; class Foo { public function foo() { return Bar::fuck(); } }
导入就相当于将目的类复制一份到当前命名空间中(http://www.lai18.com/content/368824.html)。
3. PHP命名空间有何实际应用?
命名空间的存在是为了解决以下两个问题:
1). 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2). 为非常长的标识符名称(一般是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源码的可读性。
4. 一些tips
1. 同一个空间下的类直接相互直接调用,属于一家。比如 Laravel 中的 PageController 类中能够直接写 Page::all() 这种代码来调用 Page 这个model。由于他们俩都在顶级命名空间下。
2. 若一个类存在于非顶级命名空间中,那么它仅仅能在调用相同是当前命名空间下的其它类才不用“引用”或“导入”。它们属于一家。不论什么子命名空间都是还有一个命名空间。还有一个容器,没有除了容器之间关系之外的不论什么特殊关系。
3. Laravel 採用 classmap 方式进行自己主动载入(autoload)。PHP尽管有了命名空间这个高级特性,可是这仅仅是逻辑关系,require 文件还是要有的。这个类和文件的相应关系就存在 /vendor/composer/autoload_classmap.php ,每次 composer dump-autoload 都会又一次编译、生成。
延伸阅读
《PHP基础知识总结》系列技术文章整理收藏
总结PHP基础知识。对刚開始学习的人还是高手都值得參考巩固。
9php5.4下面版本号json不支持不转义内容中文的解决方法
11PHP函数extension_loaded()使用方法实例
18php数组函数序列之sort() 对数组的元素值进行升序
20PHP使用mb_substr()解决中文字符串截取乱码问题
21php中get_object_vars()方法使用方法实例
22PHP结合HTML5使用FormData对象提交表单及上传图片
最新文章
- 关于变量和函数前&;符号的作用
- 第八十八天请假 PHP smarty模板 变量调节器,方法和块函数基本书写格式
- RMQ求区间最值 nlog(n)
- LCA模板
- 搬家后Magento前台只有产品的缩略图不显示
- textview点击后selector的pressed无效果
- 【Hadoop代码笔记】Hadoop作业提交之Child启动reduce任务
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
- Windows Azure 现已完全受 Juju 支持
- html5常用英语单词
- python利用jieba进行中文分词去停用词
- html2canvas不能识别svg的解决方案
- Hadoop分布式存储系统HDFS
- jquery 同步加载
- ViewPager+Fragment实现滑动切换页面
- SQL Server 主库DML操作慢故障处理过程
- springboot使用hibernate validator校验
- Django学习篇(web框架的由来)
- leetCode- 472. Concatenated Words
- Fluent动网格【7】:网格节点运动
热门文章
- 「UOJ351」新年的叶子
- [NC13B]贝伦卡斯泰露/[51Nod1400]序列分解
- 不思议迷宫:逆向后的放置play
- bzoj 3238: [Ahoi2013]差异 -- 后缀数组
- 2015 UESTC 数据结构专题C题 秋实大哥与快餐店 字典树
- 提示框框架KVNProgress介绍
- 请不要乱用Kotlin ? 空检查
- 使用OData快速构建REST服务
- Can a windows dll retrieve its own filename?
- Papilio Pro Boards