博主信息
博文 119
粉丝 3
评论 1
访问量 121302
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP 命名空间关键技术------PHP培训十期线上班 学号:510251 02月10日作业
赵大叔
原创
808人浏览过

命名空间关键技术

一、关键字和常用术语

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、三者区别在于目录层级的深浅。

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:命名空间的理解, 是现代php编程的关键, 众多新技术的支点就是命名空间技术
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学