27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
在一个大的项目中,可能会遇到同名的类、函数、常量,为了区分这些元素,我们可以将这些元素分别存放到不同的命名空间中。
1、命名空间就是包,用来存放项目中的类、函数、常量
2、通过namespace关键字来声明命名空间
<?php namespace China; //定义命名空间 function getInfo() { echo '我是中国人<br>'; } namespace USA; //定义命名空间 function getInfo() { echo 'I am a America<br>'; } //调用 getInfo(); //I am a America \USA\getInfo(); //I am a America \China\getInfo(); //我是中国人
注意:\表示公共空间
命名空间的名字可以是多级的(子级命名空间)。
<?php namespace China\Beijing\Shunyi; class Student { } namespace USA\Washington; class Student { } //测试: $stu1=new Student(); //相对路径 $stu2=new \USA\Washington\Student(); //绝对路径 $stu3=new \China\Beijing\Shunyi\Student(); //绝对路径 var_dump($stu1,$stu2,$stu3); //object(USA\Washington\Student)#1 (0) { } //object(USA\Washington\Student)#2 (0) { } //object(China\Beijing\Shunyi\Student)#3 (0) { }
总结:如果将相对路径转成绝对路径
公共空间+命名空间+空间元素 公共空间 命名空间 空间元素 \ China\Shanghai\PuDong\ Student
1、非限定名称访问
2、完全限定名称访问
3、限定名称访问
<?php namespace China\Beijing\Shunyi; function getInfo() { echo '顺义...<br>'; } namespace China\Beijing; function getInfo() { echo '北京...<br>'; } //访问空间元素的三种方式 getInfo(); //非限定名称访问 北京... \China\Beijing\getInfo(); //完全限定名称访问 北京... Shunyi\getInfo(); //限定名称访问 顺义... //转成绝对路径如下: // \China\Beijing\Shunyi\getInfo();
练习:将下面的相对路径转成绝对路径
namespace A\B\C; fun(); => \A\B\C\fun(); a\fun(); => \A\B\C\a\fun() C\fun(); => \A\B\C\C\fun();
完全限定名称访问元素路径太长,可以将其他空间引入到当前空间来
通过use引入命名空间
<?php namespace China\Beijing\Shunyi; function getInfo() { echo '李白<br>'; } namespace USA; function getInfo() { echo 'Lincoln<br>'; } //引入命名空间 use China\Beijing\Shunyi; //测试 getInfo(); //Lincoln Shunyi\getInfo(); //李白 /* 分析: 第一步:通过当前空间拼接成绝对路径:\USA\Shunyi\getInfo(),这个地址没有对应的空间元素 第二步:通过引入的空间拼接绝对路径:\China\Beijing\Shunyi+Shunyi\getInfo(),Shunyi是公共部分,只需要取一个,最后拼接的地址是:\China\Beijing\Shunyi\getInfo(),这个地址可以找到对应的元素 */
公共空间+引入空间+(去除公共部分,公共部分只能有一级)空间元素 比如: namespace A\B\C; function getInfo(){} namespace D\E; use A\B\C; //引入命名空间 C\getInfo(); //正确 \A\B\C\getInfo(); B\C\getInfo(); //错误 \A\B\C\B\C\getInfo();
引入类:use
引入函数:use function [php7.0以后支持]
引入常量:use const [php7.0以后支持]
<?php namespace China\Beijing\Shunyi; class Student { } function getInfo() { echo '李白<br>'; } const TYPE='学生'; namespace USA; //引入类 use China\Beijing\Shunyi\Student; //引入函数 use function China\Beijing\Shunyi\getInfo; //引入常量 use const China\Beijing\Shunyi\TYPE; //测试 $stu=new Student; var_dump($stu); echo '<br>'; getInfo(); echo TYPE;
如果引入的类和函数与当前空间的类和函数名称相同,需要给引入的类和函数取别名。
通过as取别名
<?php namespace China\Beijing\Shunyi; class Student { } function getInfo() { echo '李白<br>'; } namespace USA\Washington; class Student { } function getInfo() { echo 'Lincoln<br>'; } //引入类取别名 use China\Beijing\Shunyi\Student as ChinaStudent; //引入函数 use function China\Beijing\Shunyi\getInfo as info1; //测试 $stu=new ChinaStudent; var_dump($stu); getInfo(); //Lincoln info1(); //李白
如果一个页面没有namespace声明空间,这个页面的元素在公共空间下
公共空间用\表示
<?php function getInfo() { echo '李白<br>'; } \getInfo(); //李白
1、命名空间只能存放类、函数、const常量
2、第一个namespace前面不能有任何的代码,空白字符、header()也不行。
3、包含文件不影响当前的命名空间
本站内容均为小米原创,转载请注明出处:小米技术社区>> php的命名空间namespace,使用场景,声明方式,命名空间的引入和取别名