您的位置:首页 > 编程语言 > PHP开发

PHP中的命名空间

2015-04-06 14:13 169 查看
关于更多命名空间内容请查看PHP帮助手册点击打开链接

在PHP中,命名空间用来解决在编写类库或应用程序时可能碰到的两类问题:

用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
为很长的标识符名称创建一个别名(或简短)的名称,提高源代码的可读性。

虽然任意合法的PHP代码都可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。
命名空间通过关键字:namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。

<?php

namespace   nameSpaceName;
//php代码
?>
导入其他命名空间的内容通过操作符use实现的。

// 导入一个全局类

use \ ArrayObject ;

同一个命名空间可以定义在多个文件中,也允许指定层次化的命名空间的名称。
namespace  MyProject \ Sub \ Level ;
也可以在同一个文件中定义多个命名空间。
<?php
namespace MyProject1 {
function A(){  /*...*/ };
}
namespace MyProject2{
function A(){  /*...*/ }; 
}
?>
在实际项目中,不提倡在同一个文件中定义多个命名空间。这种方式的主要用于将多个 PHP 脚本合并在同一个文件中。
将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来。
<?php
namespace A;
namespace {
//全局代码
//由于全局代码和命名空间组合在一起,所以全局代码必须使用不带名称的namespace语句加大括号括起来。
}
?>
如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,在名称前加上前缀"\" 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。

namespace  A \ B{

function  fopen () { 

      /* ... */

      $f  = \ fopen (...);  // 调用全局的fopen函数

      return  $f ;


命名空间的名称定义

1.非限定名称(Unqualified name)
名称中不包含命名空间分隔符的标识符,例如 "namespace Foo"
2.限定名称(Qualified name)
名称中含有命名空间分隔符的标识符,例如 "namespace Foo\Bar"
3.完全限定名称(Fully qualified name)
名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如" namespace \Foo\Bar"。" namespace \Foo "也是一个完全限定名称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php namespace