PHP 命名空间(namespace)


1 命名空间综述

在C#和Java中都有命名空间的概念,而在PHP中,命名空间在PHP 5.3版本中首次加入的,以前的版本没有这个功能。

1.1 为什么要使用命名空间?

做项目时,一个文件可能会引入多个文件。如果不使用命名空间,引入的多个文件中可能存在同名的类、函数、常量,就会报错(重复定义的错误)。

以函数为例,演示如下:

1.1.1 不使用命名空间:

运行结果:

1.1.2 使用命名空间:

只在上述代码中修改b.php文件,如下:

再次访问,则不会报错,运行结果:

1.2 使用命名空间 优势

简单的说,就是解决代码冲突。具体如下:

  • 使用框架、第三方类库,可以避免的类、函数、常量的冲突。
  • 可以分工协作,有利于多人同时开发一个项目,提高开发效率。

2 定义命名空间

如上1.1.2所示,一旦namespace声明了命名空间,后面的代码都属于该空间。

  • 在定义的命名空间之前不能有任何输出。如html代码等。
  • 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句,如:declare(encoding=‘UTF-8‘);
  • 项目中,只在一个php文件的开头进行定义命名空间,并且只定义一个。
  • 通常该命名空间要遵循PSR-0命名规范(命名空间和目录结构保持一致)。

3 空间分类

分为两类:全局空间 和 命名空间

3.1 全局空间

不在namespace声明的空间里面的代码都属于全局空间。

3.2 命名空间

如:namespace Think;

如:namespace Think\Controller; 这种反斜线分割的、层次化的,就是子命名空间。

如果需要在命名空间使用全局空间的类、函数、常量,在调用时,需要加上反斜线(代表全局空间)。

4 命名空间的使用

4.1使用限定名称、非限定名称访问

  • 非限定名称:  访问当前命名空间。(在当前文件中直接使用)
  • 限定名称:     类似于相对路径,访问当前空间下的子命名空间,如:new People\Person();
  • 完全限定名称:类似于绝对路径,访问全局空间,如:new \Person();实例化全局空间下的Person类

4.2 导入 命名空间,然后直接使用

语法:use 命名空间,可以起别名(as 别名)。

目的:在当前文件中使用其他命名空间的 类、函数、常量。(使用时,就不用加上限定名称)

时间: 2024-09-30 15:44:46

PHP 命名空间(namespace)的相关文章

PHP中的命名空间(namespace)及其使用详解

PHP中的命名空间(namespace)及其使用详解 晶晶 2年前 (2014-01-02) 8495次浏览 PHP php自5.3.0开始,引入了一个namespace关键字以及__NAMESPACE__魔术常量(当然use关键字或use as嵌套语句也同时引入):那么什么是命名空间呢?php官网已很明确的进行了定义并形象化解释,这里直接从php官网copy一段文字[来源]. “什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录

Atitit  深入理解命名空间namespace  java c# php js

Atitit  深入理解命名空间namespace  java c# php js 1.1. Namespace还是package1 1.2. import同时解决了令人头疼的include1 1.3. 在不支持ns的语言里面使用ns,前缀发1 1.4. 常用命名空间的统计(约150个)1 1.5. 命名空间2 1.5.1. 在struts2中2 1.6. Linux 就支持6种不同类型的命名空间.2 1.1. Namespace还是package 1.2. import同时解决了令人头疼的in

命名空间 namespace

;命名空间 namespace 假如很多人使用你写的类可以用namespace包起来,有文件中定义命名空间 cpp中使用命名空间 using namespace ..;这样函数或者变量自动加作用域了 iostream在.h 写的命名空间把一些函数变量都包起来了,然后引进来使用using namespcase使用命名空间

PHP命名空间(Namespace)的使用详解

对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀. 例:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment.之后我可能想要增加对所有用户留言的一些信息统计功能,比如说我想得到所有留言的数量.这时候调用它们Comment提供的方法是很好的

PHP命名空间namespace使用小结

1.介绍一下php的命名空间 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色.具体举个例子,文件 foo.txt 可以同时在目录/Home/greg 和 /Home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件.另外,在目录 /Home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /Hom

PHP 使用命名空间(namespace),实现自动加载

示例: #/DB/MySql.class.php也就是DB文件夹下有MySql.class.php文件 namespace DB; class MySql { public function __construct() { var_dump(__FILE__); } } #/index.php namespace Home; use DB\MySql; $mysql = new MySql(); 报错 Fatal error: Class 'DB\MySql' not found in D:\l

struts2 命名空间 namespace 学习

默认的命名空间" namespace="" ", 根命名空间 " namespace="/" ". <package name="test" extends="struts-default"> ,如果未指定命名空间,则命名空间默认为 " namespace="" ". 默认命名空间里的Action可以处理任何命名空间下的Action请求

PHP命名空间(Namespace)的使用详解(转)

对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀. 例:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment.之后我可能想要增加对所有用户留言的一些信息统计功能,比如说我想得到所有留言的数量.这时候调用它们Comment提供的方法是很好的

php命名空间(namespace)内如何使用系统类

作者:ffsystem 使用命名空间,可以更方便的组织代码,以及代码复用.新写的一个项目引入了命名空间. 简介:使用namespace,使用__autoload自动导入类. 今天将以前的一段代码,加入到新项目时,出现了奇怪的问题: 代码中有一行: $this->db=new mysqli(***); 错误提示: Warning: require(FFSystem/mysqli.php): failed to open stream: No such file or directory in **