博客列表 >自动加载器和composer的使用- PHP培训十期线上班

自动加载器和composer的使用- PHP培训十期线上班

手机用户1576673622
手机用户1576673622原创
2020年02月18日 20:21:57709浏览

在调用某个命名空间中的类时,需要用include / require先加载类所在的文件,但这种方法有时效率低,不能实现按需加载;可用自动加载的方式来解决这个问题。下面演示类(自定义的类和composer中的类)的自动加载.

一、自定义自动加载器, 遵循psr-4标准

1. 自动加载器
  1. // 文件名load.php
  2. /**
  3. *导入命名空间`src\home`中的User类,
  4. *导入文件`src\home\User.php` (windows系统)或者`src/home/User.php` (mac系统)
  5. *导入时通过`use App\edu\home\User;`调用
  6. */
  7. namespace load;
  8. spl_autoload_register(function ($class)
  9. {
  10. //导入的路径和实际路径进行映射
  11. $prefix = 'App\edu';
  12. $file = __DIR__ . '\\src\\' . substr($class, strlen($prefix)) . '.php';
  13. $file = str_replace("\\", DIRECTORY_SEPARATOR, $file);
  14. file_exists($file) ? require $file : '文件不存在,加载失败.';
  15. });
2. 要加载的文件
  1. // 文件名 src\home\User.php;
  2. namespace src\home;
  3. class User
  4. {
  5. public static function test(): string
  6. {
  7. return __METHOD__;
  8. }
  9. }
  10. die(User::test());
3.调用
  1. // 文件名 main.php
  2. namespace main;
  3. use App\edu\home\User;
  4. require 'load.php';
  5. //触发自动加载器
  6. User::abc;
结果
  1. //运行main.php文件
  2. src\home\User::test

二、composer的安装和引入项目的方式

以composer引入验证码的项目gregwar/captcha为例

1. composer的安装
  1. //windows安装步骤
  2. 1. `phpcomposer.com`中下载安装包'Composer-Setup.exe',根据提示安装;
  3. 2. 如果安装包安装失败, 则从`phpcomposer.com`中下载 `composer.phar`文件 从阿里云下载 `mirrors.aliyun.com/composer/composer.phar`;
  4. 3. `composer.phar`文件和`php.exe`文件放在同一目录;
  5. 4. 新建`txt`文件,里面复制如下同容,另存为`composer.bat`文件:
  6. @php "%~dp0composer.phar" %
  7. 5. 双击打开` composer.bat `文件
  8. 6. 打开终端,输入:
  9. composer (如果失败,则定位到php.exe所在文件夹下,再输入composer)
  10. composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  1. //mac安装步骤
  2. 打开终端,输入
  3. curl -sS https://getcomposer.org/installer | php (等待下载)
  4. sudo rm -f (此处输入密码)
  5. sudo mv composer.phar /usr/local/bin/composer
  6. composer --version
  7. composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
2. gregwar/captcha的安装
  1. 1. 在搜索平台<https://packagist.org/>输入: chaptcha ,找到 'gregwar/captcha',打开链接
  2. 2. 复制指令 composer require gregwar/captcha
  3. 3. 打开终端,进入要操作的目录,粘贴指令,例如:
  4. cd "C:\phpstudy_pro\phpstudy_pro\WWW\php\0213"
  5. composer require gregwar/captcha
3. 引入项目
调用
  1. //文件名captcha.php
  2. namespace captcha;
  3. use Grewar\Captcha\CaptchaBuilder;
  4. //自动加载文件
  5. //vendor\gregwar\captcha\src\Grewar\Captcha\CaptchaBuilder.php
  6. require __DIR__ . 'vender\autoload.php';
  7. //实例化验证码类`
  8. $builder = new CaptchaBuilder;
  9. //生成验证码
  10. $builder->build();
  11. //生成内联验证码,放在内联标签:base64
  12. echo '<img src="' . $builder->inline() . '" onclick="location.reload()">';
结果

结语

composer项目自带加载器,直接调用就可以。自定义的自动加载器,语法如下:

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