composer

composer Composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。 一、Composer 基础概念 Composer 是 PHP 的依赖管理工具,它通过定义项目所需的依赖包及版本,自动安装和管理这些依赖,确保项目在不同环境下都能稳定运行。其核心概念主要包括以下几个方面: 1.1 包(Package) 包是 Composer 管理的基本单元,它可以是一个 PHP 类库、框架组件,或是某个功能模块。比如用于 HTTP 请求处理的 Guzzle,以及知名的 PHP 框架 Laravel、Symfony 等,都可以看作是 Composer 包。这些包被发布在 Packagist 等包仓库中,方便开发者获取使用。 1.2 composer.json 与 composer.lock composer.json是项目的依赖配置文件,开发者在其中定义项目所需的依赖包及其版本约束。例如,若要在项目中使用 PHPUnit 进行单元测试,可在composer.json添加 “phpunit/phpunit”: “^9.5” ,表示使用 PHPUnit 9.5 及以上版本,但低于 10.0 版本。​ composer.lock则是锁定依赖包具体版本的文件。当执行composer install或composer update时,Composer 会将实际安装的依赖包版本记录在composer.lock中。下次在其他环境安装依赖时,该文件能确保安装的依赖包版本与之前完全一致,避免因版本差异导致项目出现兼容性问题 。 1.3 包仓库(Repository)​ 包仓库是存储 Composer 包的地方,默认情况下,Composer 使用 Packagist 作为官方包仓库,它汇聚了海量的 PHP 开源包。除了 Packagist,开发者还可以搭建私有包仓库,用于管理内部开发的私有包,或者使用其他公共仓库,拓展包的来源。 packagist仓库地址 二、安装composer #下载安装脚本 - composer-setup.php - 到当前目录。 php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup....

November 15, 2022 · 3 min · Leanku

Composer 自动加载原理

Composer 自动加载原理 Composer 的自动加载本质是 动态加载类文件,它实现了“按需加载”的机制,避免了手动 require 每个类文件。 一、Composer 自动加载的核心 PHP 提供了 spl_autoload_register() 函数: spl_autoload_register(function ($class) { require 'src/' . str_replace('\\', '/', $class) . '.php'; }); 当你第一次使用一个类时,PHP 会调用这个函数。 $class 是你使用的类全名(包括命名空间)。 函数里通过规则找到对应文件并 require。 Composer 自动加载,就是在这个基础上做了 规范化管理。 二、Composer 生成的自动加载文件 安装依赖后,Composer 会生成: vendor/autoload.php vendor/composer/autoload_*.php vendor/autoload.php:入口文件,只需 require 一次。 vendor/composer/autoload_psr4.php:记录 PSR-4 命名空间 → 文件路径映射。 vendor/composer/autoload_classmap.php:记录 类名 → 文件路径,用于 classmap 加速加载。 vendor/composer/autoload_files.php:记录需要立即加载的文件(如全局函数库)。 vendor/autoload.php 的核心逻辑: require __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInit::getLoader(); ComposerAutoloaderInit::getLoader() 会: 初始化一个 ClassLoader 实例。 根据配置注册 PSR-4、PSR-0、classmap、files 自动加载函数到 PHP。 调用 spl_autoload_register() 注册这些函数。 三、PSR-4 自动加载机制 PSR-4 是 Composer 默认的推荐机制。 假设 composer....

November 15, 2022 · 1 min · Leanku