什么是命名空间?php命名空间的基本应用分享
什么是命名空间?
php中声明的函数名、类名和常量的名称,在同一次运行中是不能重复的,否则会产生一个致命的错误,常见的解决方法是约定一个前缀。例如 ,在项目开发时,用户 User 模块中的控制器和数据模型都声明同类的 User 类是不行的,需要在类名前面加上各自的功能前缀。可以将在控制器中的 User 类 命名为 ActUser类,在数据模型中的 User 类 命名为 ModelUser类。虽然通过增加前缀可以解决这个问题,但名字变得太长,就意味着开发时会编写更多的代码。 在php5.3以后的版本中,增加了很多其他高级语言(如 Java,C#等)使用很成熟的功能 ----- 命名空间,它的一个最明确的目的就是解决重名问题。命名空间将代码划分出不同的区域,每个区域的常量、函数和类的名字互不影响。
注意:常量从PHP5.3开始有了新的变化,可以使用 const 关键字在类的外部声明常量。虽然 const 和 define 都是用来声明常量的,但是在命名空间里, define 的作用是全局的,而 const 则作用于当前空间。这里提到的常量是指使用 const 声明的常量。
命名空间的作用和功能都很强大,在写插件或者通用库的时候再也不用担心重名问题。不过如果项目进行到一定的程度,要通过增加命名空间去解决重名问题,工作量不会比重构名字少。因此,从项目一开始的时候就应该很好的规划并指定一个命名规范。
命名空间的基本应用
默认情况下,所有的 PHP 中常量、类和函数的声明都放在全局空间下。 php5.3以后的版本有了独自的空间声明,不同空间中的相同命名是不会冲突的。独立的命名空间使用 namespace 关键字声明。
其代码如下所示:
<?php //声明这段代码的命名空间 namespace abc; // 这里是代码 ?>
注意:namespace 需要写在 PHP 脚本的顶部,必须是第一个 PHP 指令,不要再 namespace 前面出现非 PHP代码、HTML或者空格之类。
从代码 namespace abc 开始,到下一个 namespac 出现之前或者脚本运行结束是一个独立的空间,将这个空间命名为 abc 。
如果你为相同代码前澳命名空间或定义多个命名空间是不可能的,如果有多个 namespace 一起使用,则只有最后一个命名空间才能被识别,但你可以在同一个文件中定义不同的命名空间代码。
其代码如下所示:
<?php
namespace project1;
class user{
//此 user 属于project1 空间的类
}
namespace project2;
class user{
//此 user 属于project2 空间的类
}
// 上面的替代语法,另一种声明方法
namespace project3{
//命名空间 project3 下的代码
}
?>
上面的代码虽然可行,不同命名空间下使用各自的 user 类,但建议为每个独立的文件只定义一个命名空间,这样的代码可读性才是最好的。在相同的空间可以直接调用自己空间下的任何元素,而在不同空间之间是不可以直接调用其他空间元素的,需要使用命名空间的语法。其代码如下所示:
<?php
namespace project1;
const test = "这是一个常量<br>";
function demo(){
echo "这是一个函数<br>";
}
class user {
function fun(){
echo "这是一个 user 类";
}
}
echo test; //在自己的命名空间中直接使用常量
demo(); //在自己的命名空间中直接调用函数
/*************** project2 ******************/
namespace project2;
const test2 = "这也是一个常量<br>";
echo test2;
\project1\demo(); //调用 project1 空间中的 demo()
$user = new\project1\user(); //使用 project1 空间的类实例化对象
$user->fun();
?>
上例中声明了两个空间 project1 和 project2,在自己的空间中可以直接调用本空间中声明的元素,而在 project2 中调用 project1 中的元素时,使用了一种类似文件路径的语法 \空间名\元素名,对于类、函数和常量的用发是一样的。
什么是命名空间?php命名空间的基本应用分享的更多相关文章
- JAXB命名空间及命名空间前缀处理
本篇介绍下JAXB进阶使用,命名空间处理 使用package-info.java添加默认命名空间在需要添加命名空间的包下面添加package-info.java文件,然后添加@XmlSchema注解, ...
- XAML 命名空间和命名空间映射
本主题将介绍大部分 XAML 文件的根元素中存在的 XML/XAML 命名空间 (xmlns) 映射.它还将介绍如何为自定义类型和程序集生成类似的映射. XAML 命名空间如何与代码定义和类型库相关 ...
- jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间
http://blog.csdn.net/pigpigpig4587/article/details/24727791 jQuery事件命名空间 jQuery支持事件命名空间,以方便事件管理.例如,在 ...
- thinkphp 命名空间
什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色.具体举个例子,文 ...
- jquery的事件命名空间详解
jquery现在的事件API:on,off,trigger支持带命名空间的事件,当事件有了命名空间,就可以有效地管理同一事件的不同监听器,在定义组件的时候,能够避免同一元素应用到不同组件时,同一事件类 ...
- JavaScript之命名空间模式 浅析
来源于:http://www.cnblogs.com/syfwhu/p/4885628.html 前言 命名空间可以被认为是唯一标识符下代码的逻辑分组.为什么会出现命名空间这一概念呢?因为可用的单词数 ...
- struts2学习笔记之九:struts2的命名空间
struts2的命名空间适用于多人开发,根据不同模块命名不同的命名空间,方便开发和管理 struts2如果没有配置命名空间,默认命名空间为"/",Struts2中Action的完整 ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- PHP命名空间入门教程
PHP5.3当中就引入了“命名空间”的概念,一直都没怎么关注和使用,其实学习它也挺简单的,看官方的教程就行了: 命名空间概述 定义命名空间 定义子命名空间 在同一个文件中定义多个命名空间 使用命名空间 ...
- 【python】lxml处理命名空间
有如下xml <A xmlns="http://This/is/a/namespace"> <B>dataB1</B> <B>dat ...
随机推荐
- 简单记录一下原生ajax
面试老忘记,代码如下 function ajax() { var xmlHttpRequest = null; //定义XMLHttp对象的容器 if(window.XMLHttpRequest) { ...
- linux系统日常管理复习题讲解
1. 如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 2. 查看系统负载有两个常用的命令,是哪两个?这三个数值表示什么含义呢? 3. vmstat r, b, si, so, bi, b ...
- SQL语句 我喜欢上海
select * from [user] wherer name like '上海%'
- 部署github开源软件遇到的问题
jdk1.8源版本不一样: 将语言级别改为8,所有的jdk都配置为1.8 2. 遇到一些解析错误 应该是tomcat的jdk版本和项目的jdk版本不一样
- C#语言和SQL Server第十章笔记
第十章 :使用关键字模糊查询 笔记 一:使用关键字 :LIKE BETWEEN IN进行模糊查询 通配符: 一类字符,代替一个或多个真正的字符 与LIKE关键字一起使用 通配符: 解释 实例 符 ...
- (五):C++分布式实时应用框架——微服务架构的演进
C++分布式实时应用框架--微服务架构的演进 上一篇:(四):C++分布式实时应用框架--状态中心模块 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律 ...
- AutoMapper 使用总结
初识AutoMapper 在开始本篇文章之前,先来思考一个问题:一个项目分多层架构,如显示层.业务逻辑层.服务层.数据访问层.层与层访问需要数据载体,也就是类.如果多层通用一个类,一则会暴露出每层的字 ...
- angular4.0 路由守卫详解
在企业应用中权限.复杂页多路由数据处理.进入与离开路由数据处理这些是非常常见的需求. 当希望用户离开一个正常编辑页时,要中断并提醒用户是否真的要离开时,如果在Angular中应该怎么做呢? 其实Ang ...
- php 事务处理transaction
MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成 ...
- dlib人脸关键点检测的模型分析与压缩
本文系原创,转载请注明出处~ 小喵的博客:https://www.miaoerduo.com 博客原文(排版更精美):https://www.miaoerduo.com/c/dlib人脸关键点检测的模 ...