php命名空间的设计思想和缺点
相比C#等语言,你可以在php函数里面随意定义变量并赋值,而不用担心覆盖了全局变量,或者类变量;你也可以随意的定义类变量,而不用担心会和函数名冲突,因为变量前面都有个$。
php的命名空间和全局变量、局部变量的设计思想一样,都是为了尽可能的减少命名冲突。php的命名空间可以和文件系统类似,有相对命名空间和绝对命名空间。
定义命名空间
必须是第一个语句,前面不能有任何语句,注释可以。
必须是绝对命名空间。
namespace bookrpg\config;//或者namespace bookrpg\config
{
}namespace \bookrpg\config; //错误,不能有前导\
导入命名空间
必须是绝对命名空间。
use bookrpg\config\ClassName;
use \bookrpg\config\ClassName; //可以有前导\,但不建议加
use bookrpg\config\ClassName as NewClassName;
use Exception;
use \Exception; //可以有前导\,但不建议加
使用命名空间
使用绝对命名空间
$cls = new \bookrpg\config\ClassName();class MyException extends \Exception
{
}
使用相对命名空间
namespace bookrpg
{//等同于new \bookrpg\config\ClassName();$cls = new config\ClassName(); //错误,php会认为是\bookrpg\Exception,而不是全局类Exception$ex = new Exception();
}
怪异的地方
C++、Java、C#都有相似的命名空间概念,而php的命名空间不跟随大流,有自己的一套独立的思想,对于先入为主的人来来说就显得怪异和令人迷惑。
命名空间中居然有反斜杠?
点号(.)已经被用作字符串连接符了,又要区分绝对和相对命名空间,new .a.b.c()太不美观,所以选择反斜杠吧。一旦使用了命名空间,使用全局类也要加上“\”或者use一下,累不累呀?
没办法,为了严格类比文件系统的概念,也为了随便定义类名,而不用担心类名冲突。既然是严格类比文件系统,为什么定义和导入命名空间的时候,前面不加\呢?
只能说,php的设计者不是完美主义者。
但php的命名空间确实缺乏逻辑完美性:
- 前导\的使用不统一,同样是绝对命名空间,定义的时候不允许用,导入的时候却允许用。
- 即使是全局类,在非全局命名空间下,也必须使用前导\,而全局函数和变量又不受此限制。
使用建议
- 定义和导入命名空间的时候,统一不加前导\
- 所有的类都使用use导入,包括全局类,只命名空间类,有冲突的就as一下
- 禁止直接使用相对命名空间
理解了php命名空间的设计思想,并避免其设计不完美的地方,这样看来php的命名空间也是很容易接受的。
php命名空间的设计思想和缺点相关推荐
- len(x) 击败 x.len(),从内置函数看 Python 的设计思想
内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得.Python 被公认是一种新手友好型的语言,这种说法能够成立,内置函数在其中 ...
- Javascript继承机制的设计思想
我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...
- OLTP 系统和 OLAP 系统的核心设计思想
关于 OLTP 系统和 OLAP 系统的核心设计思想 数据存储系统的关于查询的典型操作: -- 第一种需求: 根据 key(1) 找 value(name,age), 单点查询 select name ...
- 从内置函数看 Python 的设计思想:len(x) 是否击败 x.len(),
内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得.Python 被公认是一种新手友好型的语言,这种说法能够成立,内置函数在其中 ...
- Linux九大哲学原理,Linux/Unix设计思想(全新阐释开源哲学,Jon “maddog” Hall作序推荐)...
<Linux/Unix设计思想> 第1章 Unix哲学:集思广益的智慧 1 1.1 NIH综合征 2 1.2 Unix的开发 2 1.3 Linux:一个人加上一百万人的智慧 4 1.4 ...
- (13)FPGA设计思想
(13)FPGA设计思想 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA设计思想 5)结语 1.2 FPGA简介 FPGA(Field Programmable ...
- FPGA设计思想与技巧
1.1 FPGA设计思想与技巧 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA设计思想与技巧: 5)结束语. 1.1.2 本节引言 "不积跬步,无以至 ...
- Kafka/Metaq设计思想学习笔记 转
转载自: http://my.oschina.net/geecoodeer/blog/194829 本文没有特意区分它们之间的区别,仅仅是列出其中笔者认为好的设计思想,供后续设计参考. 目前笔者并没 ...
- WebGIS设计思想
WebGIS设计思想 (摘自<图像图形学报>作者:宋关福.钟耳顺.王尔琪) CGI和Sever API是较早应用于WebGIS开发的方法.其中CGI是通用网关接口(Common Gat ...
- python的设计哲学是什么意思_Python彩蛋:哲学理念及设计思想(The Zen of Python, by Tim Peters)...
为了更好的了解Python哲学理念及设计思想,可以在任何一个Python交互解释器中输入import this命令.就会出现Python的一个彩蛋,描述了一系列Python的设计原则,阅读一下这些文字 ...
最新文章
- android23 imei 权限,android------关于API 23的权限问题
- 小白学python买什么书-书单狗 篇一:小白学Python,到底要看多少书?
- SublimeText设置在浏览器打开 快捷键
- 两种方法实现在HTML页面加载完毕后运行某个js
- Spring MVC Controller中返回json数据中文乱码处理
- python没有菜单栏怎么搞mac_Mac 下 sublime 怎么调出顶端菜单栏
- Java反射基础(二)--Fileds对象的使用
- .net runtime占用cpu_追踪将服务器CPU耗光的凶手!
- Android 使用JSON格式与服务器交互 中文乱码问题解决
- SpaceBase – 基于 Sass 的响应式 CSS 框架
- Unity 基础 之 IDragHanlder 简单实现 UGUI 元素随着鼠标移动,拖动的效果
- 云计算中网络基础知识
- 思科二层交换机系列------设备更换详细配置命令
- 有关Android优化比较好网络资源
- C语言实现(小米面试题)给定一个句子(只包含字母,空格,逗号和句号), 将句子中的单词位置反转,符号不变。(使用指针)
- 曾“须知少时凌云志,曾许人间第一流”,却10平米不到屋子像极了你小时候的“梦想”
- 删除shipyard
- 计算机vb实验感想,vb课程设计心得体会范文(精选3篇)
- 「镁客·请讲」Video++董慧智:让AI融入消费级视频,我们打开了视频的“黑盒子”...
- activity流程撤回功能实现
热门文章
- 计算机信息安全技术分为两个层次,李某将玉佩以合理价格转让给善意第三人朱某时,下列说法正确的是?()。...
- html5 blockquote,HTML5 Blockquote引用区块使用实例
- WOFF2与icon字体化
- 计算机用户个人设置总是重启,联想电脑总是自动重启怎么回事
- 惠普打印机介质不匹配_HP打印机驱动安装失败的解决办法
- 数据统计分析——常用统计检验方法
- 08. Web大前端时代之:HTML5+CSS3入门系列 ~ QQ空间时间轴
- java sqlite sqlite_busy_sqlite3 busy timeout
- Ubuntu 16.04 Kalibr安装使用
- Tumblr,instapaper分享