定义: 命名空间是一种封装事物的方法。
作用:一般用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:
(1) 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
(2)为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名 称,提 高源代码的可读性。
命名空间里可以出现类,函数,常量 ,但是常量必须由conts定义的常量命名空间才有效,其命名规
则要符合php命名规则。
声明:
namespace China; //必须放在最顶端 const nation='中国<br>'//常量命名空间; function getInfo() { echo "我是中国人"; } namespace USA; const nation='USA<br>'; function getInfo() { echo 'IAM A A'; } getInfo();//非限定名称访问//I AM AA (调用namespace USA的函数) \China\getInfo(); //完全限定访问//我是中国人 (调用namespace China) echo nation; // 输出USA echo \China\nation;//输出中国
定义多个命名空间,使用大括号扩起来如下例:
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } ?>
命名空间的多级访问:
namespace China\beijing\haidian; class Person { static $name ="李白"; } namespace USA\abc; class Person { static $name= "bbb"; } echo \China\beijing\haidian\Person::$name; //输出李白 属于多级访问
访问命名空间自动寻址
namespace China\beijing\haidian; function getInfo() { echo "zheshi china"; } namespace China\beijing; function getInfo() { echo "cccc"; } getInfo();//usa 命名空间在China\beijing haidian\getInfo();// zheshi china 相当与命名空间/China\beijing\haidian\getInfo(),使用相对地址去理解 beijing\haidian\getInfo();// 报错, 命名空间相当与China\beijing\beijing\haidian\getInfo() 相对地址去理解 \China\beijing\haidian\getInfo();// zheshi china 在最前面加\ 属于最顶层的空间,从第一个namespace 开始。相当于是一个绝对路径
空间访问形式 :
非限定访问: echo getInfo(); 类似与;require('getInfo.php')
限定名称访问: China\getInfo(); 类似于require('China/getInfo.php) 系统自动寻址
完全限定访问: \China\getInfo(); 类似于 requre('c:\china\getinfo.php);
引用命名空间: 使用use 来引用命名空间, 如下例:
namespace China\beijing\haidian; function Info() { echo "libai"; } namespace USA\WASH; function Info() { echo "abc"; } use China\beijing\haidian; haidian(); // 输出abc haidian\Info();//输出libai; 如果不use China\beijing\haidian 此处报错,会直接寻址到 USA\WASH\haidian\Info(); 使用引用命名空间后 引用空间的最后一个地址,与访问的第一个地址对上即可访问。 上例子 haidian\Info(),与use China\beijing\haidian; 上的haidian匹配,因此可以访问 如果是beijing\haidian\Info() 与 use China\beijing\haidian 匹配相当与 \China\beijing\haidian\beijing\haidian\Info() ,因此会报错。
命名空间的注意事项:
namespace 必须在程序最上面,即使上面head
命名空间的地址不是真实存在的目录,是虚拟的空间,但thinkphp 命名空间是真实路径
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。