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 23 PHP
PHP用mysql数据库存储session的代码
Mar 05 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
8个必备的PHP功能实例代码
Oct 27 PHP
PHP return语句的另一个作用
Jul 30 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
php HTML无刷新提交表单
Apr 05 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
PDO::errorCode讲解
Jan 28 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 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执行速度全攻略(上)
2006/10/09 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
Python循环语句之break与continue的用法
2015/10/14 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Python实现常见的回文字符串算法
2018/11/14 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
实习鉴定范文
2013/12/19 职场文书
公司联欢会策划方案
2014/05/19 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
博物馆观后感
2015/06/05 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers