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 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
php中{}大括号是什么意思
Dec 01 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
微信公众号模板消息群发php代码示例
Dec 29 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
PHP检查URL包含特定字符串实例方法
Feb 11 PHP
php生成短网址/短链接原理和用法实例分析
May 29 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 和 MySQL 时区的一点总结
2008/03/26 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
Windows下安装Memcached的步骤说明
2010/04/25 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
Extjs表单常见验证小结
2014/03/07 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
部署Python的框架下的web app的详细教程
2015/04/30 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
Python生成器以及应用实例解析
2018/02/08 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
python实现日常记账本小程序
2018/03/10 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
python生成n个元素的全组合方法
2018/11/13 Python
python中调试或排错的五种方法示例
2019/09/12 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
节约用水倡议书
2014/04/16 职场文书
劳资协议书范本
2014/04/23 职场文书
党员活动日总结
2014/05/05 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
清洁工个人工作总结
2015/03/05 职场文书
教师节表彰会主持词
2015/07/06 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript