php命名空间设计思想、用法与缺点分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-12-05 16:37:09 浏览: 评论:0
本文实例讲述了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的命名空间也是很容易接受的。
Tags: php命名空间
相关文章
- ·php命名空间学习笔记(2014-06-13)
- ·php中命名空间namespace用法介绍(2015-05-09)
- ·php命名空间学习详解(2020-09-27)
- ·PHP命名空间(Namespace)简明教程(2021-02-11)
- ·PHP命名空间(namespace)的使用基础及示例(2021-04-02)
- ·PHP中的命名空间相关概念浅析(2021-05-08)
- ·PHP使用Memcache时模拟命名空间及缓存失效问题的解决(2021-07-12)
- ·PHP命名空间namespace及use的简单用法分析(2021-10-22)
- ·PHP命名空间与自动加载类详解(2021-10-27)
- ·PHP命名空间定义与用法实例分析(2021-12-11)
- ·php的命名空间与自动加载实现方法(2021-12-12)
- ·PHP命名空间与自动加载机制的基础介绍(2021-12-12)
- ·PHP命名空间用法实例分析(2021-12-15)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)