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 常见郁闷问题答解
Nov 25 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
解析PHP工厂模式的好处
Jun 18 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
PHP获取文件行数的方法
Jun 10 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
PHP云打印类完整示例
Oct 15 PHP
php 函数使用可变数量的参数方法
May 02 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 PHP
laravel邮件发送的实现代码示例
Jan 31 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
JS实现php的伪分页
2008/05/25 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP小教程之实现链表
2014/06/09 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
js 省地市级联选择
2010/02/07 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
Python中的自定义函数学习笔记
2014/09/23 Python
python抓取最新博客内容并生成Rss
2015/05/17 Python
python os模块简单应用示例
2019/05/23 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
学生实习自我鉴定
2013/10/11 职场文书
毕业生找工作推荐信
2013/11/21 职场文书
电气工程师岗位职责
2014/01/01 职场文书
人民教师求职自荐信
2014/03/12 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
小学体育组工作总结
2015/08/13 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
Elasticsearch 索引操作和增删改查
2022/04/19 Python