博客列表 >0210命名空间完全限定名称与别名导入
0210命名空间完全限定名称与别名导入
- Admin原创转载
- 2020年02月12日 14:15:32714浏览
命名空间完全限定名称与别名导入
命名空间的使用规范
- PHP版本5.3+
- 规范了全局成员的声明与访问方式
- 规范了全局成员的命名方式与命名冲突的解决方案
命名空间常用术语
- 全局成员(4):类,接口,常量,函数;
- 全局空间:
\
这个反斜杠就是代表根目录的意思; - 完全限定名称:从反斜杠开始一层一层打开,类似于绝对路径;
- 限定名称: 开头无反斜杠,中间至少有一个反斜杠,从当前目录开始,类似于相对路径;
- 非限定名称:无反斜杠,直接上类名,在当前目录。
魔术常量
- 魔术常量与常量有何不同,魔术常量不允许用户定义,是系统自带的,会随着使用场景不同而改变值
__namespace__
返回当前命名空间__class__
返回一个完全限定名称的类名称__METHOD__
返回一个完全限定名称类中的方法__FUNCTION__
返回函数名称::class
返回具有完全限定名称的类名完全限定名称是什么样子的怎么用的
namespace xiaoyu;
//四类全局成员分别是 函数,常量,类,接口
//完全限定调用类
//首先先将我们的脚本导入进去
require 'demo1.php';
$result = \xiaoyu\lib\Demo::test();
//完全限定调用接口
//首先先将我们的脚本导入进去
require 'demo2.php';
class Demo implements xiaoyu{
public static function test(){
return '小雨';
}
}
$result = \xiaoyu\Demo::test();
//完全限定调用常量
//首先先将我们的脚本导入进去
require 'demo3.php';
$result = \xiaoyu\define\MY_SITE;
//完全限定调用函数
//首先先将我们的脚本导入进去
require 'demo4.php';
$result = \xiaoyu\fun\myfun();
//限定名称函数
$result = fun\myfun();
echo '<pre>'.print_r($result,true).'<pre/>';
导入四类全局成员方式
namespace xiaoyu;
require 'demo1.php';
//导入全局成员类
use xiaoyu\lib\Demo;
$result = Demo::test();
//导入全局成员接口
require 'demo2.php';
use xiaoyu\api\iTest;
class Demo1 implements iTest
{
public static function test()
{
return class_implements(self::class);
}
}
$result = Demo1::test();
//导入全局成员常量
//导入常量和函数的时候需要在use 后面声明一下是 const还是function
require 'demo3.php';
use const xiaoyu\define\MY_SITE;
$result = MY_SITE;
//导入全局成员函数
require 'demo4.php';
use function xiaoyu\fun\myfun;
$result = myfun();
echo '<pre>'.print_r($result,true).'<pre/>';
导入别名方式
namespace xiaoyu;
//别名引用
require 'demo2.php';
use xiaoyu\api\iTest as Test;
class Demo implements Test
{
public static function test()
{
return class_implements(self::class);
}
}
$result = Demo::test();
echo '<pre>'.print_r($result,true).'<pre/>';
USE解决啥?
use导入功能,由它所导入的类,接口,函数,常量,可以在使用时避免书写冗长的完全限定名称,可以直接书写类名等等,use导入命名空间可以解决重复命名,use导入别名,也能解决命名重复的问题::class为什么比namespace好用
答:前者能返回具有完全限定名称的类名,后者只能返回当前命名空间。
前者可以方便用于自动加载路径。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。