博客列表 >2.13 学号:478291 加载器与composer示例

2.13 学号:478291 加载器与composer示例

Lin__
Lin__原创
2020年03月30日 07:05:15762浏览

编写自动加载器

自动加载器遵循PSR-4标准,代码在运行时,实现查找PHP类、接口、Trait文件,并自动加载到当前脚本。但自动加载文件路径需与该文件中的代码的命名空间一一对应。

  • 示例:

加载器代码(autoloading.php):

  1. <?php
  2. namespace autoloading;
  3. //注册加载器
  4. spl_autoload_register(function($class){
  5. //设置项目的前缀
  6. $prefix = "autoloading\\";
  7. //设置具有项目前缀的类名的所对应的基目录
  8. $base_dir = __DIR__."\\";
  9. //去掉项目名称获取真实的类名称
  10. $real_name = substr($class,strlen($prefix));
  11. //将命名空间分隔符替换成当前系统目录分隔符
  12. $path = str_replace("\\",DIRECTORY_SEPARATOR,$real_name);
  13. //加上基目录以及PHP后缀
  14. $file = $base_dir . $path . ".php";
  15. //判断文件是否存在并进行文件加载
  16. if(file_exists($file)){
  17. require $file;
  18. }else{
  19. die("文件加载失败");
  20. }
  21. });

被加载文件代码(createUser.php):

  1. <?php
  2. namespace autoloading;
  3. class CreateUser
  4. {
  5. //生成随机数量的用户数据
  6. public static function create($num)
  7. {
  8. for($i = 0 ; $i < $num ; $i++){
  9. $user=[
  10. 'name' => chr(mt_rand(97,122)),
  11. 'age' => $i
  12. ];
  13. yield $i=>$user; //通过生成器逐条生成数据
  14. }
  15. return $user;
  16. }
  17. }

使用加载器文件代码(test.php):

  1. <?php
  2. namespace autoloading;
  3. use autoloading\CreateUser;
  4. require "autoloading.php";//引入自动加载器文件
  5. foreach (CreateUser::create(500) as $k => $v) {
  6. echo "<pre>" . print_r($v , true) . "</pre>";
  7. }

运行结果:

Composer应用示例

Composer,包(组件)依赖管理器,可以下载由第三方开发者编写的组件到项目中进行使用,下载的组件在vendor目录

  • Windows下载安装Composer

    打开网址:https://getcomposer.org/Composer-Setup.exe,下载Composer,下载完成后打开文件,一直点击为下一步完成安装

  • 查找下载组件

    打开网址:https://packagist.org/,这个网站提供全世界开发者编写的组件,本次使用到的是验证码组件,在搜索框输入chaptcha,找到gregwar/captcha,点击进入对应页面

    找到项目的目录位置,在地址栏输入cmd,回车打开终端,在命令行中输入composer require gregwar/captcha,即可下载成功对应的组件

  • 示例:

    1. <?php
    2. namespace composerTest;
    3. use Gregwar\Captcha\CaptchaBuilder;
    4. //引入自动加载器
    5. require __DIR__ . '\vendor\autoload.php';
    6. //实例化验证码类`
    7. $builder = new CaptchaBuilder;
    8. //生成验证码
    9. $builder->build();
    10. //生成内联验证码,放在内联标签:base64
    11. echo '<img src="' . $builder->inline() . '" onclick="location.reload()">';

    运行结果:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议