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 相关文章推荐
PHP安装攻略:常见问题解答(一)
Oct 09 PHP
几个php应用技巧
Mar 27 PHP
PHP中文件上传的一个问题
Sep 04 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
php接口技术实例详解
Dec 07 PHP
php使用curl实现ftp文件下载功能
May 16 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
Js sort排序使用方法
2011/10/17 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
理解Javascript闭包
2013/11/01 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
js实现简易计算器功能
2019/10/18 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
解决Mac安装scrapy失败的问题
2018/06/13 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
Python中的 enum 模块源码详析
2019/01/09 Python
python实现爬山算法的思路详解
2019/04/09 Python
python常用函数与用法示例
2019/07/02 Python
Python3常用内置方法代码实例
2019/11/18 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
个人廉洁自律承诺书
2014/03/27 职场文书
《春笋》教学反思
2014/04/15 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
端午节活动总结报告
2015/02/11 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
民事二审代理词
2015/05/25 职场文书
车间安全生产管理制度
2015/08/06 职场文书
教师节随笔
2015/08/15 职场文书
Python中的程序流程控制语句
2022/02/24 Python