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你的验证码安全码?
Jan 02 PHP
PHP 数字左侧自动补0
Mar 31 PHP
php magic_quotes_gpc的一点认识与分析
Aug 18 PHP
php include,include_once,require,require_once
Sep 05 PHP
PHP遍历二维数组的代码
Apr 22 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
PHP小程序支付功能完整版【基于thinkPHP】
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 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
关于php中一些字符串总结
2016/05/05 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
python求素数示例分享
2014/02/16 Python
python写xml文件的操作实例
2014/10/05 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
python制作填词游戏步骤详解
2019/05/05 Python
python isinstance函数用法详解
2020/02/13 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
学生党员思想汇报
2013/12/28 职场文书
青春奉献演讲稿
2014/05/08 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
公务员考察材料范文
2014/12/23 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS