Blogger Information
Blog 21
fans 0
comment 1
visits 10955
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
composer基本使用
手机用户1620888567
Original
410 people have browsed it

composer 自动加载

自动加载在根文件中新建composer.json

  1. {
  2. "name": "chloe/php22",
  3. "description": "a lightweight php database framework",
  4. "autoload": {
  5. "psr-4": {
  6. "app\\": "app"
  7. }
  8. }
  9. }
  10. 命令行中执行
  11. composer dumpautoload
  12. "psr-4": {
  13. "app\\": "app"
  14. app\\代表命名空间是这个名称的,自动调用app文件夹
  15. 也就是说app文件夹中,使用app\\命名空间的类会自动加载
  16. }
  17. 具体使用代码如下
  18. <?
  19. //引用自动加载
  20. require __DIR__.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
  21. //调用使用的命名空间类
  22. use app\dir1\MyName;
  23. (new MyName())->getOK();
  24. ?>

Composer 实战

composer install - 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖;
composer update - 从 composer.json 安装最新扩展包和依赖;
composer update vendor/package - 从 composer.json 或者对应包的配置,并更新到最新;
composer require new/package - 添加安装 new/package, 可以指定版本,如: composer require new/package ~2.5.

composer update 很危险是根据json 都按照到最新

  • Composer: PHP 项目的”包”依赖管理工具https://getcomposer.org/
  • 这些包,可以是你自己写的, 也可以来自第三方
  • 不管来自哪里, composer 都能帮你自动安装好
  • 特别是第三方包,还能帮你自动更新到指定版本

本质上, 就是一个文件自动加载器的 Plus+

1. 下载与安装

  1. 局部安装: curl -sS https://getcomposer.org/installer | php
  2. 全局安装:

    1. windows: <https://getcomposer.org/Composer-Setup.exe>
    2. mac/linux:
    1. # mac全局安装
    2. # 1 先局部安装,
    3. curl -sS https://getcomposer.org/installer | php
    4. # 2 再移动到用户命令目录中,并重命名为composer
    5. sudo mv composer.phar /usr/local/bin/composer
    6. # 测试:查看版本号
    7. composer -V

2. composer.json

composer.json: composer 配置文件,可用composer init交互式自动创建

  1. 手工创建composer.json: {}
  2. 执行composer install,不会安装任何包,只是借助该文件生成一个vendor目录
  3. vendor: 自动加载器,以及加载配置,第三方包都会下载安装到该目录下面

    • autoload.php: 自动加载器
    • composer目录: 文件自动加载配置项

3. 自动加载器

主要有二步:

  1. composer.json: 在autoload字段中声明依赖的包路径
  2. composer dumpautoload: 将autoload声明注册到 composer 中

3.1 加载非 class 脚本

  1. 任务: 自动加载:config/database.php,lib/common.php
  2. 第一步: composer.json中,添加autoload.files字段

    1. {
    2. "autoload": {
    3. "files": ["config/database.php", "lib/common.php"]
    4. }
    5. }

    注意: files: 必须指定具体文件名(不支持批量设置)

  3. 第二步:执行:composer dumpautoload命令,注册文件路径
    vendor/composer/中自动生成: autoload_files.php

    1. # vendor/composer/autoload_files.php
    2. // vendor目录
    3. $vendorDir = dirname(__DIR__);
    4. // 项目目录,即应用根目录
    5. $baseDir = dirname($vendorDir);
    6. return array(
    7. 'e498698fb6f1e841bf7ec2b12ccada5f' => $baseDir . '/config/database.php',
    8. '95c4794a79ec3bdc221033c3deaf8dd9' => $baseDir . '/lib/common.php',
    9. );
  4. 编写测试脚本,如index.php

  1. require __DIR__ . '/vendor/autoload.php';
  2. // 1. 自定义脚本(非类)
  3. // 不必再使用require手工加载所有依赖文件
  4. // require __DIR__ . '/lib/common.php';
  5. // require __DIR__ . '/config/database.php';
  6. echo DB_HOST, PHP_EOL;
  7. echo currDate(time()) , PHP_EOL;
  8. // localhost
  9. // 2022年12月11日 14时18分43秒

3.2 加载自定义类文件

  1. composer.json: autoload中添加classmap字段

    1. {
    2. "autoload": {
    3. "files": ["config/database.php", "lib/common.php"],
    4. "classmap": ["inc/" ]
    5. }
    6. }
    7. // 注: `classmap`支持路径(批量设置),不必遵循任何规范
  2. composer dumpautoload: 注册自定义 class 类

    自动生成vendor/composer/autoload_classmap.php,内容如下:

    1. $vendorDir = dirname(__DIR__);
    2. $baseDir = dirname($vendorDir);
    3. return array(
    4. 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    5. 'hello\\Test1' => $baseDir . '/inc/Class1.php',
    6. 'hello\\Test2' => $baseDir . '/inc/Class2.php',
    7. );
  3. 测试脚本添加以下内容

    ```php
    // 2自定义类文件
    // 不必手工加载相关class文档, 直接使用即可
    echo hello\Test1::get() . PHP_EOL;
    echo hello\Test2::get() . PHP_EOL;

// hello\Test1::get()
// hello\Test2::get()

  1. ### 3.3 PSR-4 自动加载规范
  2. - PSR:(Standard Recommendations)PHP PHP FIG 组织制定的推荐标准
  3. - PSR-4 要求
  4. 1. 类空间映射到类文件路径
  5. 2. 类名与类文件同名
  6. 3. 一个类文件中只允许存在一个类
  7. 1. `composer.json`, `autoload`,添加`psr-4`字段
  8. ```json
  9. {
  10. "autoload": {
  11. "files": ["config/database.php", "lib/common.php"],
  12. "classmap": ["inc/", "src/Base.php"],
  13. "psr-4": {
  14. "app\\": ["app"]
  15. }
  16. }
  17. }
  18. // 1. 键: 命名空间, 值: 命名空间对应的目录,支持批量设置
  19. // 2. 值可以是数组,表示同一空间的类,可以分布在不同的目录下面
  20. // 3. 命名空间不一定和类文件路径完全对应,只需要注册查询规则
  1. composer dumpautoload,注册遵循 PSR-4 规范的类

    自动生成vendor/composer/autoload_psr4.php,内容如下:

    1. $vendorDir = dirname(dirname(__FILE__));
    2. $baseDir = dirname($vendorDir);
    3. return array(
    4. 'app\\' => array($baseDir . '/app'),
    5. 'Chloe\\Model\\' => array($baseDir . '/src'),
    6. );
  2. 测试脚本index.php中, 添加以下内容

    ```php
    // 3. PSR-4: 类的自动加载
    echo Article::index();

    echo UserModel::getUsers();

  1. ---
  2. ## 4. 实战: 安装第三方包
  3. 第三方"包"查询平台:<https://packagist.org/>
  4. ### 4.1 常规包
  5. 以某流行的数据库模型类为例:`catfan/medoo`
  6. 有二种安装方式
  7. 1. 将包名写入`composer.json``require`字段中,用`install`安装
  8. 2. 直接使用`require`指令,将字段写入与安装同步完成
  9. > 注: 所有第三方包,自动保存在 vendor 目录下统一管理
  10. 方法 1: `require`字段 + `install/update`指令
  11. 1. `composer.json`添加包`"require": {"catfan/medoo": "2.1.*"}`
  12. ```version
  13. 2.1.* [2.1,2.2)
  14. 2.* [2,3.0)
  1. composer.lock可锁定第 3 方库版本,先将它删除,安装后会自动生成该文件
  2. 终端执行composer install,开始安装require字段中的包
  3. 也可通过composer update,安装包与更新composer.lock同步完成

方法 2: composer require 包,写入配置,下载安装,更新 lock 全部同时完成

  1. 先将包移除:composer remove catfan/medoo,同时会更新composer.json/lock
  2. composer require catfan/medoo, 一条指令全搞定
  3. 测试脚本 demo2.php
  1. // 测试Medoo\Medoo包 mews/captcha
  2. require __DIR__ . '/vendor/autoload.php';
  3. // 连接数据库
  4. $db = new Medoo\Medoo([
  5. 'type'=>'mysql',
  6. 'host'=>'localhost',
  7. 'database'=>'phpedu',
  8. 'username'=>'root',
  9. 'password'=>'root'
  10. ]);
  11. // $users = $db->select('users', ['id','username','email'], ['id[>=]'=>5,'LIMIT'=>3]);
  12. // debug(): 查看sql语句,并不执行,方便静态检查
  13. $users = $db->debug()->select('users', ['id','username','email'], ['id[>=]'=>5,'LIMIT'=>3]);
  14. echo PHP_EOL;
  15. $users = $db->select('users', ['id','username','email'], ['id[>=]'=>5,'LIMIT'=>3]);
  16. foreach ($users as $user) {
  17. vprintf("%d: %s ( %s )\n", $user);
  18. }

4.2 脚本架

脚手架: 项目的基本目录结构(已包含了包依赖管理功能)

  1. 以安装 ThinkPHP框架脚手为例:

    1. # 创建基于ThinkPHP的项目,项目目录:blog
    2. composer create-project topthink/think blog
    3. # 默认下载最新稳定版本,可指定版本号,如6.0.*
    4. composer create-project topthink/think blog 6.0.*
  2. 只需要ThinkPHP框架源码(用于更新)

    1. # 安装tp源码
    2. composer require topthink/framework
    3. # 移除tp源码
    4. composer remove topthink/framework
  3. php.edu/1212/blog/public/,可看到框架启动界面

更多指令:https://docs.phpcomposer.com/03-cli.html

gregwar/captcha
google/recaptcha

Correcting teacher:PHPzPHPz

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
Author's latest blog post