Composer上手只需两步:运行composer require monolog/monolog并引入require __DIR__ . '/vendor/autoload.php';;安装则按系统选择对应方式,验证用composer --version。

Composer 不是“学”出来的,是“用”出来的——只要你会写 require_once __DIR__ . '/vendor/autoload.php';,再跑通一次 composer require monolog/monolog,你就已经上手了。
怎么装好 composer 命令,让它在终端里直接可用
别被“全局安装”绕晕。你真正需要的只是一步到位的本地可用命令:
- Windows:去
getcomposer.org/download/下载Composer-Setup.exe,双击按提示走完就行 - macOS:用 Homebrew 最省心:
brew install composer - Linux:一行命令搞定:
curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer
验证是否装好?终端里敲 composer --version。看到版本号(比如 2.7.7),就说明它已经在你系统里待命了。
常见错误现象:composer: command not found → 说明没进 PATH;临时补救:用 php composer.phar 替代;长期放项目目录的 composer.phar 容易误提交、版本混乱,不建议。
怎么让已有 PHP 项目接入 Composer 管理依赖
进你的项目根目录(比如 my-legacy-app/),执行:composer init。它会问你项目名、作者、描述这些,全回车默认也行;关键一步是配置自动加载——强烈建议填:psr-4 + App => src/(假设你准备把类文件挪到 src/ 下并加 namespace App;)。
生成的 composer.json 至少长这样:
{
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
容易踩的坑:
- 跳过
"autoload"配置 → 你自己的类不会被自动加载,require_once还得手写一堆 - 项目已有大量无命名空间的老代码 → 先别急着重构,可改用
"classmap"模式扫描目录:"classmap": ["lib/", "includes/"] -
composer.json里暂时空着"require"也没关系,后面用composer require加更安全
怎么加一个包(比如 Monolog)并确保能用上
在项目根目录运行:composer require monolog/monolog。Composer 会自动做三件事:下载包到 vendor/、更新 composer.json 的 require 字段、生成或刷新 vendor/autoload.php。
然后在你的入口文件(如 index.php)顶部加上这一行:
require __DIR__ . '/vendor/autoload.php';
为什么必须用 __DIR__?因为 ./vendor/autoload.php 或 ../vendor/autoload.php 一挪目录就挂;CLI 和 Web 下路径行为也不一致,容易本地能跑、线上报错。
常见错误现象:
- 先写了
session_start()或输出 HTML,再引入vendor/autoload.php→ 报Cannot send session cache limiter - 漏掉这行,却在
src/中用了MonologLogger→ 类找不到,且 IDE 不报错(只运行时报) - 手动
require_once 'vendor/monolog/monolog/src/Monolog/Logger.php'→ 绕过 Composer 加载逻辑,下次换版本或换结构就直接报错
composer install 和 composer update 到底该用哪个
composer install 只读 composer.lock,装里面写死的版本;composer update 会重新解析 composer.json,升级到满足约束的最新兼容版。
使用场景判断很简单:
- 你刚
clone一个别人写的项目 → 无脑composer install - 你要加一个新包,比如日志组件 → 先
composer require monolog/monolog(它自动update并更新lock) - 你想把所有包升到最新小版本(如
2.1.3 → 2.1.9)→composer update --with-dependencies,别裸跑update
最容易被忽略的点:composer.lock 是协作和上线的契约。有人偷偷 update 后提交了新 lock,其他人 install 出来行为不一致,但没人意识到问题出在 lock 文件被悄悄改了。











