欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

命名空间引用类的三种方式 和 命名冲突解决 与 一个自动加载类

程序员文章站 2022-03-06 13:40:03
...

一.引用类的三种方式:

  1. 非限定名称:相对于"当前路径",类名前无“空间前缀”
  2. 限定名称:相对于"相对路径",类名前存在“非全局开始的空间前缀”
  3. 完全限定名称:相对于"绝对路径",类名前存在“全局开始的空间前缀”

样式代码:

  1. <?php
  2. // 父空间
  3. namespace No1 {
  4. class Hello
  5. {
  6. }
  7. // 1. 非限定名称: Hello, 相当于“当前路径”
  8. echo Hello::class.' 这是非限定', '<br>';
  9. // 2. 限定名称: No2\Hello,相当于“相对路径”
  10. echo No2\Hello::class.' 这是限定', '<br>';
  11. // 3. 完全限定名称: \NON\Hello, 相当于“绝对路径”
  12. echo \NON\Hello::class.' 这是完全限定', '<hr>';
  13. }
  14. // 子空间
  15. namespace No1\No2 {
  16. class User
  17. {
  18. }
  19. }
  20. // 其它空间
  21. namespace NON {
  22. class User
  23. {
  24. }
  25. }

效果预览:

命名空间引用类的三种方式 和 命名冲突解决 与 一个自动加载类

二.别名的引入与冲突的解决:

  1. 先创建两个php文件:zy2.php,zy2-1.php

文件zy2.php样式代码:

  1. <?php
  2. // 使用别名的原因有二个: 简化, 重名
  3. namespace Php1;
  4. // 加载它
  5. require 'zy2-1.php';
  6. // 当前空间引用一个与自己无关联的类,需要使用完全限定名称
  7. $user = new \Php2\IndexModel;
  8. var_dump($user);
  9. echo '<br>';
  10. // 导入空间别名,来简化类名称
  11. // use 默认导入就是一个“完全限定名称”
  12. use Php2\IndexModel as Index;
  13. // 别名访问
  14. $index = new index;
  15. var_dump($index);
  16. echo '<br>';
  17. // 如果通过别名导入的类,与当前空间的类命名冲突
  18. class IndexModel
  19. {
  20. }
  21. $user = new IndexModel;
  22. var_dump($user);
  23. echo '<hr>';

文件zy2-1.php样式代码:

  1. <?php
  2. namespace Php2;
  3. class IndexModel
  4. {
  5. // ...
  6. }

效果预览:

命名空间引用类的三种方式 和 命名冲突解决 与 一个自动加载类

三.自动加载类

  1. 先创建一个文件zy3.php,在同级创建一个文件夹zdjzq,在zdjzq文件夹中再创建一个models文件夹;
  2. 接下来在model文件下新建两个文件:DqkjsModel.phpYinrModels.php;

文件zy3.php样式代码:

  1. <?php
  2. // 自动加载
  3. // 将类空间名称与类文件所在的路径进行映射,实现自动加载
  4. namespace zdjzq;
  5. use zdjzq\models\DqkjsModel;
  6. use zdjzq\models\YinrModels;
  7. // 使用自动加载器
  8. require 'app/loader.php';
  9. $dqkjs = new DqkjsModel;
  10. $yinr = new YinrModels;
  11. var_dump($dqkjs,$yinr);
  12. echo '<hr>';

文件DqkjsModel.php样式代码:

  1. <?php
  2. namespace zdjzq\models;
  3. class DqkjsModel
  4. {
  5. // ...
  6. }

文件YinrModels.php样式代码:

  1. <?php
  2. namespace zdjzq\models;
  3. class YinrModels
  4. {
  5. // ...
  6. }

效果预览:

命名空间引用类的三种方式 和 命名冲突解决 与 一个自动加载类