php在没有命名空间之前是怎么调(php命名空间设计思想、用法与缺点分析)
php在没有命名空间之前是怎么调
php命名空间设计思想、用法与缺点分析本文实例讲述了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程序设计有所帮助。
原文链接:https://blog.csdn.net/llj1985/article/details/51189283
- cpu怎么访问php(服务器大量php-cgi.exe进程导致CPU占用100%的解决方法)
- php框架创建控制器代码(php连接sftp的作用以及实例代码)
- python与php(解决Python3 被PHP程序调用执行返回乱码的问题)
- php 获取证书列表(用PHP做了一个领取优惠券活动的示例代码)
- php模块使用方法(PHP操作XML中XPath的应用示例)
- thinkphp5开发小程序后台(PHP小程序支付功能完整版基于thinkPHP)
- php静态类和动态类的区别(PHP Trait代码复用类与多继承实现方法详解)
- php如何继承多个类(PHP面向对象程序设计子类扩展父类子类重新载入父类操作详解)
- php 与asp对比(asp.net和php的区别点总结)
- php扩展安装示例(php扩展开发入门demo示例)
- PHP如何安装(PHP使用 Pear 进行安装和卸载包的方法详解)
- 腾讯云换php版本(腾讯云服务器配置php环境的方法)
- php执行语句(PHP goto语句用法实例)
- php 设置sessionid生成机制(PHP Cli 模式设置进程名称的方法)
- php常见加密方法(PHP实现的AES 128位加密算法示例)
- apache服务器对php的支持原理(php apache开启跨域模式过程详解)
- 佛肚竹盆景的养护之道(佛肚竹盆景的养护之道)
- 包水饺(包水饺手法怎么包视频)
- 越南河粉(越南河粉来自哪里)
- 按这几方面养护佛肚竹盆景,保证枝叶繁茂,造型优美(按这几方面养护佛肚竹盆景)
- 冰岛旅游攻略(冰岛旅游攻略及花费八日游)
- 寒假旅游攻略(成都寒假旅游攻略)
热门推荐
- dedecms列表栏目样式修改(在dedecms文章页中获取当前栏目字段如content字段)
- python中的insert(python assert的用处示例详解)
- html5应用的几个建议
- docker启动命令大全(Docker常用命令Study03详解)
- uni-app搜索框源代码(如何用uni-app实现顶部导航栏显示按钮和搜索框)
- python3目录操作(Python3 pip3 list 出现 DEPRECATION 警告的解决方法)
- CSS伪元素:before, :after
- javascript:void(0)的用法
- python yield 使用浅析(yii框架使用分页的方法分析)
- 织梦标签在哪里设置(织梦dedecms gbk站点转utf8之mip改造方案分享)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9