定义: 命名空间是一种封装事物的方法。

作用:一般用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:

(1) 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

(2)为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名 称,提高源代码的可读性。

命名空间里可以出现类,函数,常量 ,但是常量必须由conts定义的常量命名空间才有效,其命名规

则要符合php命名规则。

声明:

namespaceChina;//必须放在最顶端constnation='中国<br>'//常量命名空间;functiongetInfo(){echo"我是中国人";}namespaceUSA;constnation='USA<br>';functiongetInfo(){echo'IAMAA';}getInfo();//非限定名称访问//IAMAA(调用namespaceUSA的函数)\China\getInfo();//完全限定访问//我是中国人(调用namespaceChina)echonation;//输出USAecho\China\nation;//输出中国

定义多个命名空间,使用大括号扩起来如下例:

<?phpnamespaceMyProject{constCONNECT_OK=1;classConnection{/*...*/}functionconnect(){/*...*/}}namespaceAnotherProject{constCONNECT_OK=1;classConnection{/*...*/}functionconnect(){/*...*/}}?>

命名空间的多级访问:

namespaceChina\beijing\haidian;classPerson{static$name="李白";}namespaceUSA\abc;classPerson{static$name="bbb";}echo\China\beijing\haidian\Person::$name;//输出李白属于多级访问

访问命名空间自动寻址

namespaceChina\beijing\haidian;functiongetInfo(){echo"zheshichina";}namespaceChina\beijing;functiongetInfo(){echo"cccc";}getInfo();//usa命名空间在China\beijinghaidian\getInfo();//zheshichina相当与命名空间/China\beijing\haidian\getInfo(),使用相对地址去理解beijing\haidian\getInfo();//报错,命名空间相当与China\beijing\beijing\haidian\getInfo()相对地址去理解\China\beijing\haidian\getInfo();//zheshichina在最前面加\属于最顶层的空间,从第一个namespace开始。相当于是一个绝对路径

空间访问形式 :

非限定访问: echo getInfo(); 类似与;require('getInfo.php')

限定名称访问: China\getInfo(); 类似于require('China/getInfo.php) 系统自动寻址

完全限定访问: \China\getInfo(); 类似于 requre('c:\china\getinfo.php);

引用命名空间: 使用use 来引用命名空间, 如下例:

namespaceChina\beijing\haidian;functionInfo(){echo"libai";}namespaceUSA\WASH;functionInfo(){echo"abc";}useChina\beijing\haidian;haidian();//输出abchaidian\Info();//输出libai;如果不useChina\beijing\haidian此处报错,会直接寻址到USA\WASH\haidian\Info();使用引用命名空间后引用空间的最后一个地址,与访问的第一个地址对上即可访问。上例子haidian\Info(),与useChina\beijing\haidian;上的haidian匹配,因此可以访问如果是beijing\haidian\Info()与useChina\beijing\haidian匹配相当与\China\beijing\haidian\beijing\haidian\Info(),因此会报错。

命名空间的注意事项:

namespace 必须在程序最上面,即使上面head

命名空间的地址不是真实存在的目录,是虚拟的空间,但thinkphp 命名空间是真实路径