博主信息
博文 119
粉丝 3
评论 1
访问量 121232
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
命名空间基础知识
赵大叔
原创
1272人浏览过

一、命名空间关键字和常用术语

1、namespace: 声明一个命名空间。
2、完全限定名称:总是从根空间开始,第一个字符一定是反斜线。
3、限定名称:成员名称前面至少要一个命名空间, 至少要有一个反斜线,且不能在首位。
4、非限定名称:成员前面不能有任何的命名空间,不能有反斜线。
5、导入:使用use关键字;别名:使用as关键字;。
6、::class:直接返回的完全限定的类名;__NAMESPACE__:直接返回的当前空间名称。

对于函数的常量,在当前空间找不到,会自动到全局空间下找。

三类命名空间:

  1. <?php
  2. namespace texhong\nhontrach;
  3. // 声明命名空间必须是程序脚本的第一条语句
  4. class Demo
  5. {
  6. const DEPART = 'texhong_phongnhansu';
  7. }
  8. namespace texhong\nganlong;
  9. class Demo
  10. {
  11. const DEPART = 'nganlong_phongnhansu';
  12. }
  13. namespace texhong;
  14. class Demo
  15. {
  16. const DEPART = 'phongnhansu';
  17. }
  18. // 非限定名称:只能访问当前空间下成员
  19. echo Demo::DEPART .'<br>';
  20. // 限定名称:在具的层级关系的空间下访问深层级的空间成员
  21. echo nganlong\Demo::DEPART .'<br>';
  22. // 完全限定名称:可以访问所有空间下成员
  23. echo \texhong\nhontrach\Demo::DEPART .'<br>';

演示效果图:

别名:

  1. <?php
  2. namespace texhong\nhontrach\xuatnhapkhau\nhanviengiayto;
  3. class Nhanvien
  4. {
  5. const NAME = 'cu';
  6. }
  7. namespace texhong\nhontrach\xuatnhapkhau\nhanviengiayto;
  8. class Chuquan
  9. {
  10. const NAME = 'hien';
  11. }
  12. // 1. 当要多次使用较长空间名称的时候,给空间起个别名会很方便
  13. // 给外部的空间起了一个别名
  14. use texhong\nhontrach\xuatnhapkhau\nhanviengiayto as tnxn;
  15. // 别名调用
  16. echo tnxn\Nhanvien::NAME .'<br>';
  17. echo tnxn\Chuquan::NAME .'<hr>';
  18. // 2. 类级的别名:空间名带上类名称
  19. use texhong\nhontrach\xuatnhapkhau\nhanviengiayto\Nhanvien as NH;
  20. echo NH::NAME .'<hr>';
  21. namespace test;
  22. // 当类别名和原名一样时,可以省略
  23. use texhong\nhontrach\xuatnhapkhau\nhanviengiayto\Nhanvien;
  24. echo Nhanvien::NAME .'<hr>';

演示效果图:

二、自动加载

其实就是通过封装一个函数,实现自动加载
命名空间必须和类文件所在的绝对路径一一对应
当前类名称与当前的类文件的名称完全一致

  1. // 自动加载器
  2. <?php
  3. try {
  4. // 注册自动加载
  5. spl_autoload_register(function($className){
  6. //1. 应该将类名中的命名空间的分隔符转为目录分隔符
  7. $path = str_replace('\\', DIRECTORY_SEPARATOR, $className);
  8. // 2. 生成真正要加载的类文件名称
  9. $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
  10. // 3. 加载这个文件
  11. require $file;
  12. });
  13. } catch (Exception $e) {
  14. die($e->getMessage());
  15. }
  16. // 使用自动加载
  17. namespace testAutoload;
  18. require 'autoload.php';
  19. use inc\lib\Demo1;
  20. use inc\lib\Demo2;
  21. use inc\lib\Demo3;
  22. echo Demo1::show() .'<hr>';
  23. echo Demo2::show() .'<hr>';
  24. echo Demo3::show() .'<hr>';

要加载文件目录:

演示效果图:

总结:

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

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

批改状态:合格

老师批语:命名空间与目录的关系非常相似,不是吗?
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学