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 相关文章推荐
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 PHP
php中动态修改ini配置
Oct 14 PHP
php生成动态验证码gif图片
Oct 19 PHP
一个简单至极的PHP缓存类代码
Oct 23 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 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
杏林同学录(八)
2006/10/09 PHP
php下intval()和(int)转换使用与区别
2008/07/18 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
php简单实现数组分页的方法
2016/04/30 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
2016/06/21 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
简单理解Python中基于生成器的状态机
2015/04/13 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
flask框架路由常用定义方式总结
2019/07/23 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
python批量修改ssh密码的实现
2019/08/08 Python
初中三好学生事迹材料
2014/01/13 职场文书
新年主持词
2014/03/27 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
多表查询、事务、DCL
2021/04/05 MySQL