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实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
php中设置多级目录session的问题
Aug 08 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
PHP对文件进行加锁、解锁实例
Jan 23 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
php 类自动载入的方法
Jun 03 PHP
分享php分页的功能模块
Jun 16 PHP
必须收藏的php实用代码片段
Feb 02 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 PHP
php引用和拷贝的区别知识点总结
Sep 23 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中uploaded_files函数使用方法详解
2011/03/09 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
jquery cookie插件代码类
2009/05/26 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
vue权限管理系统的实现代码
2019/01/17 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python素数检测实例分析
2015/06/15 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
django富文本编辑器的实现示例
2019/04/10 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
python的pstuil模块使用方法总结
2019/07/26 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
信息系统专业个人求职信范文
2013/12/07 职场文书
客服工作职责
2013/12/11 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
先进事迹材料范文
2014/12/29 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
python tkinter实现定时关机
2021/04/21 Python
详解JVM系列之内存模型
2021/06/10 Javascript