标签:.com 编码方式 ceshi 第一条 nbsp 角色 UNC 内容 一个
(PHP 5 >= 5.3.0, PHP 7)
什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。
在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:
虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits)、接口、函数和常量。
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字。
在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:
<html> <?php namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
另外,与PHP其它的语言特征不同,同一个命名空间可以定义在多个文件中,即允许将同一个命名空间的内容分割存放在不同的文件中。
1. 例一
首先我们先建立两个类文件
a.php
<?php class Test { public function ceshi(){ echo __FILE__; } }
b.php
<?php class Test { public function ceshi(){ echo __FILE__; } }
index.php
<?php require_once("a.php"); require_once("b.php");
现在运行index.php文件
你会发现有一个致命错误: Fatal error: Cannot redeclare class Test in。。。很显然,无法重新声明Test类,因为你引入了两次,而且两个文件中的类名称相同,冲突了。这个时候就需要命名空间来解决这个问题,并且很容易。
2. 例二
我们现在把两个类文件稍作修改。
a.php
<?php namespace a\Test; class Test { public function ceshi(){ echo __FILE__; } }
b.php
<?php namespace b\Test; class Test { public function ceshi(){ echo __FILE__; } }
namespace关键字是用来声明命名空间的。现在运行index.php发现没有错误,修改index.php进行方法调用测试
index.php
<?php require_once("a.php"); require_once("b.php"); $a = new a\Test\Test(); $a->ceshi();
现在运行index.php文件
D:\phpStudy\WWW\demo\namespace\a.php
标签:.com 编码方式 ceshi 第一条 nbsp 角色 UNC 内容 一个
原文地址:https://www.cnblogs.com/zhouguowei/p/9261560.html