php命名空间设计思想、用法与缺点分析


Posted in PHP onJuly 17, 2019

本文实例讲述了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的命名空间不跟随大流,有自己的一套独立的思想,对于先入为主的人来来说就显得怪异和令人迷惑。

  1. 命名空间中居然有反斜杠?

    点号(.)已经被用作字符串连接符了,又要区分绝对和相对命名空间,new .a.b.c()太不美观,所以选择反斜杠吧。

  2. 一旦使用了命名空间,使用全局类也要加上“\”或者use一下,累不累呀?

    没办法,为了严格类比文件系统的概念,也为了随便定义类名,而不用担心类名冲突。

  3. 既然是严格类比文件系统,为什么定义和导入命名空间的时候,前面不加\呢?

    只能说,php的设计者不是完美主义者。

但php的命名空间确实缺乏逻辑完美性:

  • 前导\的使用不统一,同样是绝对命名空间,定义的时候不允许用,导入的时候却允许用。
  • 即使是全局类,在非全局命名空间下,也必须使用前导\,而全局函数和变量又不受此限制。

使用建议

  • 定义和导入命名空间的时候,统一不加前导\
  • 所有的类都使用use导入,包括全局类,只命名空间类,有冲突的就as一下
  • 禁止直接使用相对命名空间

理解了php命名空间的设计思想,并避免其设计不完美的地方,这样看来php的命名空间也是很容易接受的。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
wordpress之wp-settings.php
Aug 17 PHP
PHP 批量删除数据的方法分析
Oct 30 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
php 安全过滤函数代码
May 07 PHP
PHP面向对象概念
Nov 06 PHP
php页面防重复提交方法总结
Nov 25 PHP
php计算数组相同值出现次数的代码(array_count_values)
Jan 20 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
Yii框架日志操作图文与实例详解
Sep 09 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 #PHP
php基于协程实现异步的方法分析
Jul 17 #PHP
php学习笔记之字符串常见操作总结
Jul 16 #PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 #PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 #PHP
php array_chunk()函数用法与注意事项
Jul 12 #PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 #PHP
You might like
javascript 面向对象编程基础:封装
2009/08/21 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
JavaScript实现美化滑块效果
2019/05/17 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
pyenv命令管理多个Python版本
2017/03/26 Python
wxPython之解决闪烁的问题
2018/01/15 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
Python装饰器结合递归原理解析
2020/07/02 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
HTML5标签使用方法详解
2015/11/27 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
毕业生的自我评价分享
2013/12/18 职场文书
开学典礼感言
2014/02/16 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
鲁迅故里导游词
2015/02/05 职场文书
工作态度检讨书范文
2015/05/06 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang