PHP中的命名空间相关概念浅析


Posted in PHP onJanuary 22, 2015

1. 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();  

            }

           }

导入就相当于将目的类复制一份到当前命名空间中。

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 相关文章推荐
FCKeditor的安装(PHP)
Jan 13 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
Jul 10 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
PHP中数组定义的几种方法
Sep 01 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 PHP
PHP积分兑换接口实例
Feb 09 PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 PHP
PHP中set error handler函数用法小结
Nov 11 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
php实现分页功能的详细实例方法
Sep 29 PHP
PHP rsa加密解密算法原理解析
Dec 09 PHP
PHP生成随机数的方法实例分析
Jan 22 #PHP
9条PHP编程小知识及易犯的小错误
Jan 22 #PHP
PHP将HTML转换成文本的实现代码
Jan 21 #PHP
php使用Cookie控制访问授权的方法
Jan 21 #PHP
PHP+MySQL修改记录的方法
Jan 21 #PHP
PHP+MySQL删除操作实例
Jan 21 #PHP
PHP+MySQL插入操作实例
Jan 21 #PHP
You might like
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
NOT NULL 和NULL
2007/01/15 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
python求质数的3种方法
2018/09/28 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
Python何时应该使用Lambda函数
2019/07/02 Python
Python try except else使用详解
2021/01/12 Python
美国滑板店:Tactics
2020/11/08 全球购物
super关键字的用法
2012/04/10 面试题
硕士研究生自我鉴定
2013/11/08 职场文书
应用心理学个人求职信范文
2013/12/11 职场文书
教你打造完美的创业计划书
2014/01/06 职场文书
党员评议思想汇报
2014/10/08 职场文书
未婚证明格式
2015/06/15 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
房产遗嘱范本
2015/08/06 职场文书
如何做好员工培训计划?
2019/07/09 职场文书