博客列表 > composer基本使用

composer基本使用

手机用户1620888567
手机用户1620888567 原创
2023年03月23日 11:44:18 192浏览

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

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