博客列表 >PHP命名空间精通篇,类的自动加载案例,掏出TP6框架的老底...

PHP命名空间精通篇,类的自动加载案例,掏出TP6框架的老底...

张福根一修品牌运营
张福根一修品牌运营原创
2020年12月09日 17:44:001342浏览

命名空间:别名与导入

空间中访问类与访问函数

一、在某个空间中访问类与访问函数

  1. namespace php\one
  2. {
  3. include 'demo1.php';
  4. // 其他空间中的类
  5. $demo = new \Demo();
  6. function func1(){
  7. echo '我是php\one空间中的函数func1()<br>';
  8. }
  9. function var_dump($name)
  10. {
  11. echo 'hello,你调用的是我哦...'. $name . '<br>';
  12. }
  13. // 调用的函数
  14. func1();//我是php\one空间中的函数func1()
  15. echo "<hr>";
  16. \func1();//我是公共空间中的函数func1()
  17. echo "<hr>";
  18. // 调用函数与系统函数重名时
  19. var_dump(88);//hello,你调用的是我哦...88
  20. echo "<hr>";
  21. // 必须加上全局空间标识符'\',才能访问到系统内置的函数
  22. \var_dump(100);//int(100)
  23. echo "<hr>";
  24. // 全局空间中访问类
  25. \var_dump(\Test::APP);//string(9) "张福根"
  26. echo "<hr>";
  27. }
  28. //全局空间
  29. namespace {
  30. class Test
  31. {
  32. const APP = '张福根';
  33. }
  34. }

二、命名空间的别名与导入

  1. namespace cn\fugen;
  2. class User{};
  3. namespace thirteen;
  4. // 1. 使用use导入命名空间,引入空间cn\chloe,成功引入命名空间以后,可以使用限定名称调用类元素
  5. use cn\fugen;
  6. $user = new fugen\User;
  7. // 为空间起别名,使用别名代替命名空间
  8. use cn\fugen as c;
  9. $user = new c\User;
  10. // 2. 使用use导入一个类,导入类以后就可以使用非限定名称度调用类元素
  11. use cn\fugen\User;
  12. $user = new User();
  13. //为类起别名,使用别名代替类名
  14. use cn\fugen\User as AAUser;
  15. $new = new AAUser;

三. 实现类的自动加载功能

实现类的自动加载功能

  1. <?php
  2. try {
  3. spl_autoload_register(function($class_name){
  4. $file = __DIR__ . DIRECTORY_SEPARATOR . $class_name . '.php' ;
  5. if( !( is_file($file)&&file_exists($file) ) )
  6. throw new \Exception('文件名不合法或者文件不存在');
  7. require $file;
  8. });
  9. } catch (\Throwable $th) {
  10. $th->getMessage();
  11. }
  12. //给类起别名,use extend\lib\Order as Order;
  13. use extend\lib\Zhang;
  14. use extend\lib\Fugen;
  15. // 用别名访问类元素
  16. echo Zhang::$name.'<br>';
  17. echo '<hr>';
  18. echo Fugen::$name.'<br>';

案例总结:

一. 在某个空间中访问类与访问函数有什么区别

  • 1、在空间中访问类,不论是本空间中的类还是其他空间中的类元素,都不能省略空间
  • 2.如果调用的函数与系统函数重名,与定义在全局空间中的自定义函数重名,优先调用当前空间中的函数,找不到时才会去全局查找

二、命名空间的别名与导入分别指:

  • 1、使用use导入命名空间,引入空间cn\chloe,成功引入命名空间以后,可以使用限定名称调用类元素
  • 2、使用use导入一个类,导入类以后就可以使用非限定名称度调用类元素

三. 实现类的自动加载功能:spl_autoload_register()

  • spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool
  • autoload_function 欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()。
  • throw 此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常。
  • prepend如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议