前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP-命名空间

PHP-命名空间

作者头像
cwl_java
发布2022-11-30 09:01:06
1.7K0
发布2022-11-30 09:01:06
举报
文章被收录于专栏:cwl_Java

1.2 命名空间

1.2.1 介绍

在一个大的项目中,可能会遇到同名的类、函数、常量,为了区分这些元素,我们可以将这些元素分别存放到不同的命名空间中。

1、命名空间就是包,用来存放项目中的类、函数、常量

2、通过namespace关键字来声明命名空间

1.2.2 声明命名空间
代码语言:javascript
复制
<?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();	//我是中国人

注意:\表示公共空间

1.2.3 多级命名空间

命名空间的名字可以是多级的(子级命名空间)。

代码语言:javascript
复制
<?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) { } 

总结:如果将相对路径转成绝对路径

代码语言:javascript
复制
公共空间+命名空间+空间元素
公共空间           命名空间                  空间元素
   \         China\Shanghai\PuDong\        Student
1.2.4 访问空间元素的三种方式

1、非限定名称访问

2、完全限定名称访问

3、限定名称访问

代码语言:javascript
复制
<?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();

练习:将下面的相对路径转成绝对路径

代码语言:javascript
复制
例题一:
namespace A\B\C;
fun();		=>	\A\B\C\fun();
a\fun();	=>	\A\B\C\a\fun()
C\fun();	=>	\A\B\C\C\fun();
1.2.5 引入命名空间

完全限定名称访问元素路径太长,可以将其他空间引入到当前空间来

通过use引入命名空间

代码语言:javascript
复制
<?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(),这个地址可以找到对应的元素
*/

引入命名空间的拼接规则

代码语言:javascript
复制
公共空间+引入空间+(去除公共部分,公共部分只能有一级)空间元素

比如:
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();
1.2.6 引入空间元素

引入类:use

引入函数:use function [php7.0以后支持]

引入常量:use const [php7.0以后支持]

代码语言:javascript
复制
<?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;
1.2.7 给类、函数取别名

如果引入的类和函数与当前空间的类和函数名称相同,需要给引入的类和函数取别名。

通过as取别名

代码语言:javascript
复制
<?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();	//李白
1.2.8 公共空间

如果一个页面没有namespace声明空间,这个页面的元素在公共空间下

公共空间用\表示

代码语言:javascript
复制
<?php
function getInfo() {
	echo '李白<br>';
}
\getInfo();		//李白
1.2.9 命名空间注意事项

1、命名空间只能存放类、函数、const常量

2、第一个namespace前面不能有任何的代码,空白字符、header()也不行。

3、包含文件不影响当前的命名空间

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.2 命名空间
    • 1.2.1 介绍
      • 1.2.2 声明命名空间
        • 1.2.3 多级命名空间
          • 1.2.4 访问空间元素的三种方式
            • 1.2.5 引入命名空间
              • 1.2.6 引入空间元素
                • 1.2.7 给类、函数取别名
                  • 1.2.8 公共空间
                    • 1.2.9 命名空间注意事项
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档