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连接数据库代码应用分析
May 29 PHP
php列出一个目录下的所有文件的代码
Oct 09 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
php中spl_autoload详解
Oct 17 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
php中session定期自动清理的方法
Nov 12 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
php图片添加水印例子
Jul 20 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 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笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
python批量同步web服务器代码核心程序
2014/09/01 Python
Python三级目录展示的实现方法
2016/09/28 Python
python如何实现内容写在图片上
2018/03/23 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
详解Python3中的 input() 函数
2020/03/18 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
瀑布模型都有哪些优缺点
2014/06/23 面试题
文员自我评价怎么写
2013/09/19 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
爽歪歪广告词
2014/03/20 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android