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 相关文章推荐
我的论坛源代码(七)
Oct 09 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
ThinkPHP控制器间实现相互调用的方法
Oct 31 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
php连接MSsql server的五种方法总结
Mar 04 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php全排列递归算法代码
2012/10/09 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
js date 格式化
2017/02/15 Javascript
react路由配置方式详解
2017/08/07 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
layui动态渲染生成select的option值方法
2019/09/23 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python同时替换多个字符串方法示例
2019/09/17 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
汽车检测与维修专业求职信
2013/10/30 职场文书
音乐专业应届生教师求职信
2013/11/04 职场文书
拾金不昧表扬信范文
2014/01/11 职场文书
个人优缺点自我评价
2014/01/27 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
525心理健康活动总结
2015/05/08 职场文书
地球上的星星观后感
2015/06/02 职场文书