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 相关文章推荐
利用static实现表格的颜色隔行显示的代码
Sep 02 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 PHP
apache和php之间协同工作的配置经验分享
Apr 08 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 PHP
php获取英文姓名首字母的方法
Jul 13 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 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的任意文件执行漏洞
2006/10/09 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
js实现图片旋转的三种方法
2014/04/10 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
vue-cli之router基本使用方法详解
2017/10/17 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
python常用函数详解
2016/09/13 Python
Python 正则表达式的高级用法
2016/12/04 Python
详解python中的json的基本使用方法
2016/12/21 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
Java如何获得ResultSet的总行数
2016/09/03 面试题
JSP&Servlet技术面试题
2015/05/21 面试题
股份转让协议书范本
2015/01/27 职场文书
搞笑结婚保证书
2015/05/08 职场文书
活动经费申请报告
2015/05/15 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
商业计划书范文
2019/04/24 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers