Blogger Information
Blog 119
fans 3
comment 1
visits 94397
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 命名空间关键技术------PHP培训十期线上班 学号:510251 02月10日作业
赵大叔
Original
668 people have browsed it

命名空间关键技术

一、关键字和常用术语

1、完全限定名称:从全局空间开始查找的成员,类似绝对路径。

2、限定名称:从当前空间开始查找的成员,类似相对路径。

3、非限定名称:仅在当前空间查找的成员,类似当前路径。

4、use:导入关键字。用法:use ...

5、::class:返回具的完全限定的类名。

Q&A:
Q1: 完成限定名称与限定名称, 非限定名称之间的转换方式是什么?
A1:
1、 非限定名称和限定名称可以直接转化成完全限定名称,区别在于开始查找的位置。
2、 完全限定名称:\开始。
3、非完全限定名称:至少有一个且不是第一个字符的\
4、非限定名称:没有\

Q2: use 解决了什么问题?
A2: 先用use关键字直接导入成员,可以避免写冗长的完全限制名称。

as 解决导入简化完全限定名称时造成命名冲突的问题

Q3: ::class操作符为什么比__NAMESPACE__好用? 具体应用场景有哪些?
A3: ::class:直接返回的完全限定的类名;__NAMESPACE__:直接返回的当前空间名称。
1、我们一般都直接调用类,所以::class用的更多。
2、__NAMESPACE__.\Demo\function:此用法可以避免代码被写死的问题。

二、实例演示

1、完全限定名称访问四类全局成员的方式

  1. //demo2 创建带有命名空间的全局成员
  2. <?php
  3. //创建带命名空间的类
  4. namespace unit1\loai;
  5. class Loai
  6. {
  7. public static function index() : array
  8. {
  9. return [
  10. 'className' => __CLASS__
  11. ];
  12. }
  13. }
  14. //创建带命名空间的接口
  15. namespace unit1\api;
  16. interface iTest
  17. {
  18. public static function xinchao ();
  19. }
  20. //创建带命名空间的函数
  21. namespace unit1\flx;
  22. function getFuncname () : string
  23. {
  24. return __FUNCTION__;
  25. }
  26. //创建带命名空间的常量
  27. namespace unit1\param;
  28. const SITE_NAME = 'TEXHONG';
  1. //demo1 完全限定名称访问四类全局成员
  2. <?php
  3. //创建命名空间
  4. namespace unit1;
  5. // 1、访问完全限定名称的类
  6. //加载
  7. require 'demo2.php';
  8. //完全限定名称,从全局开始“\”
  9. $result1 = \unit1\loai\Loai::index();
  10. //返回具有完全限定名称的类名
  11. echo '<pre>' .print_r($result1,true);
  12. echo '<hr>';
  13. // 2、访问完全限定名称的接口
  14. //接口需要先实现接口中的方法
  15. class Test implements \unit1\api\iTest
  16. {
  17. public static function xinchao()
  18. {
  19. return class_implements(self::class);
  20. }
  21. }
  22. $result2 = Test::xinchao();
  23. echo '<pre>' .print_r($result2,true);
  24. echo '<hr>';
  25. // 3、访问完全限定名称的函数
  26. $result3 = \unit1\flx\getFuncname();
  27. echo '<pre>' .print_r($result3,true);
  28. echo '<hr>';
  29. // 4、访问完全限定名称的常量
  30. $result4 = \unit1\param\SITE_NAME;
  31. echo '<pre>' .print_r($result4,true);
  32. echo '<hr>';

2、导入四类全局成员的方式

  1. <?php
  2. //导入’use‘
  3. namespace unit1;
  4. //加载
  5. require 'demo2.php';
  6. //导入类
  7. use unit1\loai\Loai;
  8. $result1 = loai::index();
  9. echo '<pre>' .print_r($result1,true);
  10. echo '<hr>';
  11. //导入接口
  12. use unit1\api\iTest;
  13. //接口需要先实现接口中的方法
  14. class Test implements iTest
  15. {
  16. public static function xinchao()
  17. {
  18. return class_implements(self::class);
  19. }
  20. }
  21. $result2 = Test::xinchao();
  22. echo '<pre>' .print_r($result2,true);
  23. echo '<hr>';
  24. //导入函数(和类、接口的区别, 要加上类型)
  25. use function unit1\flx\getFuncname;
  26. $result3 = getFuncname ();
  27. echo '<pre>' .print_r($result3,true);
  28. echo '<hr>';
  29. //导入常量
  30. use const unit1\param\SITE_NAME;
  31. $result4 = SITE_NAME;
  32. echo '<pre>' .print_r($result4,true);
  33. echo '<hr>';

3、全局成员中的别名引用方式

别名:解决导入简化的完全限定名称的成员的同时, 也会带来命名的冲突问题。

  1. function getFuncname () : string
  2. {
  3. //.....
  4. }
  5. //导入函数(和类、接口的区别, 要加上类型)
  6. //如果当前空间已经有函数,则导入会报错,’as‘ 别名可以解决
  7. //别名和原名一样,则可以省略
  8. use function unit1\flx\getFuncname as getFuncnamex;
  9. $result3 = getFuncnamex ();
  10. echo '<pre>' .print_r($result3,true);
  11. echo '<hr>';

有关命名空间的总结:
1、命名空间借鉴了传统的使用目录管理文件的方式, 来管理程序中的全局成员。
2、完全限定名称、非完全限定名称、非限定名称。(都是名称,也就是名字,相当于文件名。)
3、三者区别在于目录层级的深浅。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:命名空间的理解, 是现代php编程的关键, 众多新技术的支点就是命名空间技术
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post