php命名空间设计思想、用法与缺点分析
时间:2022-07-27
本文章向大家介绍php命名空间设计思想、用法与缺点分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了php命名空间设计思想、用法与缺点。分享给大家供大家参考,具体如下:
相比C#等语言,你可以在php函数里面随意定义变量并赋值,而不用担心覆盖了全局变量,或者类变量;你也可以随意的定义类变量,而不用担心会和函数名冲突,因为变量前面都有个$。
php的命名空间和全局变量、局部变量的设计思想一样,都是为了尽可能的减少命名冲突。php的命名空间可以和文件系统类似,有相对命名空间和绝对命名空间。
定义命名空间
必须是第一个语句,前面不能有任何语句,注释可以。 必须是绝对命名空间。
namespace bookrpgconfig;
//或者
namespace bookrpgconfig
{
}
namespace bookrpgconfig; //错误,不能有前导
导入命名空间
必须是绝对命名空间。
use bookrpgconfigClassName;
use bookrpgconfigClassName; //可以有前导,但不建议加
use bookrpgconfigClassName as NewClassName;
use Exception;
use Exception; //可以有前导,但不建议加
使用命名空间
使用绝对命名空间
$cls = new bookrpgconfigClassName();
class MyException extends Exception
{
}
使用相对命名空间
namespace bookrpg
{
//等同于new bookrpgconfigClassName();
$cls = new configClassName();
//错误,php会认为是bookrpgException,而不是全局类Exception
$ex = new Exception();
}
怪异的地方
C++、Java、C#都有相似的命名空间概念,而php的命名空间不跟随大流,有自己的一套独立的思想,对于先入为主的人来来说就显得怪异和令人迷惑。
- 命名空间中居然有反斜杠? 点号(.)已经被用作字符串连接符了,又要区分绝对和相对命名空间,new .a.b.c()太不美观,所以选择反斜杠吧。
- 一旦使用了命名空间,使用全局类也要加上“”或者use一下,累不累呀? 没办法,为了严格类比文件系统的概念,也为了随便定义类名,而不用担心类名冲突。
- 既然是严格类比文件系统,为什么定义和导入命名空间的时候,前面不加呢? 只能说,php的设计者不是完美主义者。
但php的命名空间确实缺乏逻辑完美性:
- 前导的使用不统一,同样是绝对命名空间,定义的时候不允许用,导入的时候却允许用。
- 即使是全局类,在非全局命名空间下,也必须使用前导,而全局函数和变量又不受此限制。
使用建议
- 定义和导入命名空间的时候,统一不加前导
- 所有的类都使用use导入,包括全局类,只命名空间类,有冲突的就as一下
- 禁止直接使用相对命名空间
理解了php命名空间的设计思想,并避免其设计不完美的地方,这样看来php的命名空间也是很容易接受的。
- STOMP协议介绍
- ADO.NET实体框架连接串引发的异常:Unable to load the specified metadata resource
- Mono产品生命周期
- WordPress免插件仅代码实现文章归档模板 II
- Paket 介绍
- C语言学不会,编程能力无法提升?你的问题我来解决!
- 实现WCF和Unity 的集成
- Qt中纯C++项目发布为dll的方法(超详细步骤)
- .NET的Actor模型:Orleans
- UML:类图复习-鸡生蛋,蛋生鸡
- DotNet多个程序集合并工具
- Spring官网下载dist.zip的几种方法
- Spring Security笔记:HTTP Basic 认证
- WordPress免插件仅代码实现文章浏览次数的方法(1)
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 【python-leetcode142-快慢指针】环形链表2
- 【python-leetcode141-快慢指针】环形链表
- python-快速排序
- 【python-leetcode75-双指针】颜色分类
- 【python-leetcode713-双指针】乘积小于k的子数组
- vuejs之构建简易音乐播放器
- vuejs小例子之天气查询
- 【python-leetcode259-双指针】三个数的最小和
- vuejs之vue.js+axios结合使用
- c语言之指向指针的指针
- c语言之利用#if #endif来进行注释或者运行不同的主函数
- c++之对组pair
- c++STL容器之set/multiset容器
- c++STL容器之list容器
- c++STL容器之deque容器