Blogger Information
Blog 25
fans 1
comment 1
visits 17307
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0213作业+PSR与composer+10期线上班
江川林
Original
699 people have browsed it

PSR

psr是PHP推荐编码规范的简称

要创建一个自动加载器要遵循以下几步
-使用__autoload()函数或spl_autload_register()函数
-创建项目前缀
-创建项目前缀所对应的文件基目录
-获取真实类名
-将真实类名的分隔符,转换成文件目录分隔符
-组成文件名
-加载文件名对应的php文件

注意:需要自动加载的文件的储存路径必须和自动加载的文件名一致,且命名空间也是;

以下是遵循PSR-4的简单的自动加载器

  1. <?php
  2. namespace chapter3;
  3. //创建自动加载器
  4. spl_autoload_register(function ($class){
  5. // 创建项目前缀
  6. $prefix = 'app\home\\';
  7. // 创建类名前缀所对应的文件基目录
  8. $base = __DIR__ . '\src\\';
  9. // var_dump($base);
  10. // 获取真实类名
  11. $real = substr($class, strlen($prefix));
  12. // var_dump($real);
  13. // 将命名空间分隔符,替换成目录分隔符
  14. $path = str_replace('\\',DIRECTORY_SEPARATOR,$real);
  15. // 获取文件名
  16. // echo '<br>';
  17. $file_name = $base . $path . '.php';
  18. // var_dump($file_name);
  19. // echo '<br>';
  20. file_exists($file_name) ? require $file_name : die('文件不存在,加载失败');
  21. });
  22. //echo DIRECTORY_SEPARATOR;

Composer实战

-安装composer
-在packagist.org中下载需要自动加载的组件

以下是用composer实现简单的验证码组件自动加载

  1. <?php
  2. namespace chapter3;
  3. //验证码
  4. //加载PSR-4的自动加载器
  5. require __DIR__ . '\vendor\autoload.php';
  6. //导入验证码组件的空间别名
  7. use Gregwar\Captcha\CaptchaBuilder;
  8. //实例化验证码类
  9. $builder = new CaptchaBuilder;
  10. //生成验证码
  11. $builder->build();
  12. //内联验证码
  13. $img = $builder->inline();
  14. //放进图片中,在页面显示
  15. echo '<img src=" ' . $img . ' " >';
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:自动加载很有意思, 也很重要, 假如一个初学者, 看了你的博客 , 能否理解这个技术呢? 还有, 再过上几个月, 你再回看这些作业 , 还能看明白吗? 请多写点注释和说明吧
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments