说说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中的命名空间相关概念的更多相关文章
- C语言中的命名空间
C语言中的命名空间 命名空间是为了解决 "在相同作用域内如何区分 相同的标识符". 说明: ①只有在相同作用域的情况下才能使用到命名空间去区分标识符,在嵌套的作用域.不同的作用域区 ...
- 替换 wcf 消息传输中的 命名空间
替换 wcf 消息传输中的 命名空间,http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix
- JavaScript中创建命名空间
引用:http://ourjs.com/detail/538d8d024929582e6200000c 在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺 ...
- Namespacing in PHP (php 中使用命名空间)
最近学习一下php的命名空间,中文文档不多,搜到一篇英文的,讲的还蛮系统的,特此翻译一下,以备以后查阅,大家有什么高见或更深刻或者 更悟透的见解希望能不吝赐教,晚辈感激不尽. 原文: http://c ...
- 在JavaScript中创建命名空间的几种写法
在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: var sayHello = function() { return 'Hel ...
- js中创建命名空间的几种写法
在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: var sayHello = function() { return 'Hel ...
- Entity Framework中实体模型命名空间的问题
在添加一个实体数据模型的时候(就是扩展名为edmx那位)属性里明明设置了自己的命名空间,但是后台的Designer.cs命名空间生成规则却是项目的默认命名空间加edmx文件所在文件夹的名称, 是BUG ...
- 解读Python编程中的命名空间与作用域
变量是拥有匹配对象的名字(标识符).命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典.一个Python表达式可以访问局部命名空间和全局命名空间里的变量.如果一个局部变量和一个全局 ...
- PHP中的命名空间(namespace)及其使用详解
PHP中的命名空间(namespace)及其使用详解 晶晶 2年前 (2014-01-02) 8495次浏览 PHP php自5.3.0开始,引入了一个namespace关键字以及__NAMESPAC ...
随机推荐
- JAVA中关于大数问题
这里只是java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 一.样例:java中的输出a+b import java.io ...
- [CF626F]Group Projects
[CF626F]Group Projects 题目大意: 有一个长度为\(n(n\le200)\)的数列\(\{A_i\}\),将其划分成若干个子集,每个子集贡献为子集\(\max-\min\).求子 ...
- 【洛谷】1972:[SDOI2009]HH的项链【莫队+树状数组】
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- asp.net调用存储过程1
1,传入参数,传出参数 public int GetTeam1Id(string userId) { int team1ID = -1; st ...
- PAT甲级1087. All Roads Lead to Rome
PAT甲级1087. All Roads Lead to Rome 题意: 确实有从我们这个城市到罗马的不同的旅游线路.您应该以最低的成本找到您的客户的路线,同时获得最大的幸福. 输入规格: 每个输入 ...
- PID控制原理和算法
闭环控制是根据控制对象输出反馈来进行校正的控制方式,它是在测量出实际与计划发生偏差时,按定额或标准来进行纠正的.比如控制一个电机的转速,就得有一个测量转速的传感器,并将结果反馈到控制路线上.提到闭环控 ...
- URL资源跨域访问 跨域使用session信息
SilverLight 出于对安全性的考虑默认情况下对URL的访问进行了严格的限制,只允许访问同一子域下的URL资源. 下表列出了Silverlight 2.0 中 URL 访问规则: WebCl ...
- Android 动画——Layout Animations布局动画
Layout Animations主要使用LayoutTransition为布局的容器设置动画,当容器中的视图层次发生变化时存在过渡的动画效果. LayoutTransition This class ...
- jquery.lazyload.js实现图片懒载入
个人理解:将须要延迟载入的图片的src属性所有设置为一张同样尽可能小(目的是尽可能的少占宽带,节省流量,因为缓存机制,当浏览器载入了一张图片之后,同样的图片就会在缓存中拿.不会又一次到server上拿 ...
- undefined详解
[对于<JS高级程序设计>的理解] “即使未初始化的变量会自动被赋值undefined值,但显式地初始化变量依然是明智的选择.如果能够做到这一点,那么当typeof操作符返回‘undefi ...