php的namespace已经推出很久了,但是一直没有机会用到,今天有时间详细看了一遍,为了巩固阅读效果小小的总结一下。
1 声明 namespace xx 例:namespace Foo;
1 声明 namespace xx 例:namespace Foo;
2 第一个namespace 声明之前不能有任何代码
3 可以是用namespace{}将声明中的内容包含起来 namespac Foo{}
4 一个文件中可以有多个namespace 声明
5 将全局的非命名空间代码和命名空间代码组合在一起的时候必须使用大括号形式,全局代码必须使用一个不带名称的namespace语法加大括号括起来。例
<?php
namespace pro1{
class foo{}
}
namespace {
globfun(){}
}
namespace pro2{
.....
}
6 在命名空间中 php 遇到类时总是解析到当前命名空间下的xx类。如果要使用php基础类或全局类必须使用全局限定名称“\” ,否则会抛出类名不存在的错误。
对于函数和常量来说,如果该命名空间内不存在该函数或常量,那么php会使用全局空间中的函数或常量。
例:
<?php
namespace A\B
class Exception extends \Exception {}
7 可以定义子命名空间。和目录类似命名空间包括
相对路径形式和
决定路径形式
<?php
namespace blog{
function create(){echo 'blog\creat';}//相对路径方式 被当做当前blog空间下的sub空间中的函数 subcreate blog\subsub\ subcreate();//绝对路径方式\blog\sub\subcreate();
}
namespace blog\sub{
//被认为是 当前 blog\sub空间下的子空间。blog\create(); //undefined function blog\sub\blog\create()//正确方式 采用绝对路径形式\blog\create();function subcreate(){echo 'subcreate';}
}
7 常量
__NAMESPACE__ 输出当前空间名称
在没有命名空间的地方使用返回空字符串“”
8 命名空间别名 use
php不支持导入函数和常量
支持对类名或命名空间
例:
<?php
use
My
\
Full
\
Classname
as
Another
;
//与
use My\Full\NSname as NSname 相同
use My\Full\NSname;
//导入全局类
use \ArrayObject;
例:
<?php
namespace blog{
//错误方式 use关键词不支持相对模式
use sub as subt;
//正确方式
use blog\sub as subt;
subt\subcreate();
}
namespace blog\sub{
function subcreate(){
echo 'subcreate';
}
}
10 php支持在一行中使用多个use语句
<?php
use My\Full\Classname as Another, My\Full\NSname;