博主信息
博文 65
粉丝 2
评论 0
访问量 74933
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP命名空间精通篇,类的自动加载案例,掏出TP6框架的老底...
张福根一修品牌运营
原创
1559人浏览过

命名空间:别名与导入

空间中访问类与访问函数

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

  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() 会添加函数到队列之首,而不是队列尾部。
批改老师:灭绝师太灭绝师太

批改状态:合格

老师批语:__autoload已经被摒弃, 框架中对类的加载使用的是composer自动加载器, 遵循psr-4规范
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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

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