PHP Composer安装和使用教程(新手必看)
在实现 MVC 设计模式时,需要手动加载文件,开发效率低,并且在实际项目开发中,还需要给项目添加依赖,从而扩展项目的功能。为此,本节将在自定义框架中使用 Composer 管理项目,实现自动加载和管理项目依赖。
大多数 PHP 框架都支持使用 Composer 管理项目依赖。Composer 还为项目实现了自动加载。
在 Composer 的官方网站可以下载 Composer。在 Windows 中安装 Composer 的方式有两种,一种是使用安装程序安装,另一种是使用命令行安装。
这里选择使用安装程序安装,具体安装步骤如下:
① 在 Composer 的官方网站下载 Composer-Setup.exe,下载后双击文件图标启动安装程序,选择推荐的安装模式。
② 安装程序提示选择是否使用开发者模式(Developer mode),若选中此项,则不提供卸载功能,推荐不选中。
③ 安装过程提示选择 PHP 命令行程序时,单击“Browse…”按钮浏览文件,选择 C:\web\php8.2\php.exe。
④ 进入填写代理服务器界面后,选择不使用代理,单击“Next”按钮。
⑤ 进入准备安装界面,单击“Install”按钮进行安装。
Composer 安装成功后,会自动添加环境变量。在系统变量 Path 中添加的路径如下:
在用户变量 Path 中添加的路径如下:
⑥ 打开新的命令提示符窗口,执行“composer”命令测试 Composer 是否安装成功,如果看到下面的结果,说明 Composer 安装成功。
为了使开发更简单,可以在 myframe.test 项目中使用 Composer 实现类的自动加载,具体步骤如下:
① 在 C:\web\www\myframe 目录下创建 composer.json 文件,具体代码如下:
此处的配置表示将 App 命名空间映射给 app 目录,当需要加载 App 命名空间中的类时,到 app 目录中查找类文件,App 命名空间中的子命名空间将会映射为 app 目录下的子目录。
例如,当需要自动加载 App\Http\Controllers\StudentController 类时,加载的类文件路径为 app\Http\Controllers\StudentController.php。
② 在命令提示符窗口中切换到 composer.json 文件所在目录中,执行 composer install 命令安装依赖关系所需组件,并初始化自动加载信息。
命令执行完成后,输出结果如下:

图 1 vendor 目录结构
在项目中直接引入 vendor\autoload.php 文件就可以实现自动加载,实现自动加载功能的具体代码都保存在 vendor\composer 目录中。
需要注意的是,vendor\composer 目录中的文件都是由 Composer 自动生成的,不推荐开发人员修改里面的代码。
③ 重新编写 public\index.php 文件,引入 vendor\autoload.php 文件实现自动加载,具体代码如下:
④ 为了和 Laravel 框架的模型文件的命名方式保持一致,将原有的模型文件 app\StudentModel.php 路径改为 app\Models\Student.php。然后修改 app\Models\Student.php 文件,将命名空间放在 App 下,并修改类名,具体代码如下:
⑤ 将原有的 app\StudentController.php 文件放入 app\Http\Controllers 目录中,在文件中导入命名空间,具体代码如下:
⑥ 将原有的视图文件 views\student.php 移动到 resources\views 目录中。
⑦ 修改 public\index.php 文件,定义路由规则,根据路由找到对应的控制器名和方法名,具体代码如下:
为了解决手动下载类库这个问题,Composer 提供了项目依赖管理功能,它可以自动完成依赖包的下载和安装,并通过命名空间自动引入。
Composer 通过 packagist 资源库获取依赖包。在 packagist 资源库中,依赖包的命名方式为“用户名/包名”。例如“naux/auto-correct”包能够在中文和英文之间添加空格,并纠正专用名词的大小写。
安装依赖包的方式有两种:
通常情况下,一个包会有多个版本,指定版本号有多种方式,具体如下表所示:
下面以“naux/auto-correct”包为例,演示使用 Composer 管理项目依赖,具体步骤如下:
① 安装依赖包需要开启 zip 扩展,打开 PHP 配置文件 php.ini,搜索“zip”找到 zip 扩展的配置项,将配置项前面的注释去掉,修改后的配置如下:
② 重启 Apache 服务使修改后的配置生效。
③ 在命令提示符窗口中,切换到 C:\web\www\myframe 目录,执行如下命令安装依赖包:
安装依赖包后,打开 composer.json 文件,会看到里面自动添加了如下代码:
④ 在 app\Http\Controllers\StudentController.php 中导入命名空间,具体如下所示:
⑤ 导入命名空间后,编写 test() 方法,具体代码如下:
⑥ 通过浏览器访问 http://www.myframe.test/student/test,输出结果如下:
如需卸载依赖包,可以使用如下命令:
通过上述操作可以看出,使用 Composer 管理项目依赖非常方便,只需执行命令安装需要使用的依赖包,在代码中导入命名空间即可。
安装Composer
Composer 是 PHP 项目中用于管理项目依赖(dependency)的工具。开发人员在项目中声明依赖的外部工具库,Composer 就会自动安装这些工具库依赖的库文件。大多数 PHP 框架都支持使用 Composer 管理项目依赖。Composer 还为项目实现了自动加载。
在 Composer 的官方网站可以下载 Composer。在 Windows 中安装 Composer 的方式有两种,一种是使用安装程序安装,另一种是使用命令行安装。
这里选择使用安装程序安装,具体安装步骤如下:
① 在 Composer 的官方网站下载 Composer-Setup.exe,下载后双击文件图标启动安装程序,选择推荐的安装模式。
② 安装程序提示选择是否使用开发者模式(Developer mode),若选中此项,则不提供卸载功能,推荐不选中。
③ 安装过程提示选择 PHP 命令行程序时,单击“Browse…”按钮浏览文件,选择 C:\web\php8.2\php.exe。
④ 进入填写代理服务器界面后,选择不使用代理,单击“Next”按钮。
⑤ 进入准备安装界面,单击“Install”按钮进行安装。
Composer 安装成功后,会自动添加环境变量。在系统变量 Path 中添加的路径如下:
C:\web\php8.2 C:\ProgramData\ComposerSetup\bin在上述路径中,“C:\web\php8.2”是 PHP 的安装目录,“C:\ProgramData\ComposerSetup\bin”是 Composer 的可执行文件目录。
在用户变量 Path 中添加的路径如下:
//全局依赖包的可执行文件目录 C:\Users\用户名\AppData\Roaming\Composer\vendor\bin上述路径表示全局依赖包的可执行文件目录。
⑥ 打开新的命令提示符窗口,执行“composer”命令测试 Composer 是否安装成功,如果看到下面的结果,说明 Composer 安装成功。
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 2.5.5……
使用Composer实现自动加载
虽然 PHP 提供了自动加载机制,但是要在项目中实现自动加载功能还需要手动编写代码,操作起来相对复杂。为了使开发更简单,可以在 myframe.test 项目中使用 Composer 实现类的自动加载,具体步骤如下:
① 在 C:\web\www\myframe 目录下创建 composer.json 文件,具体代码如下:
{ "autoload": { "psr-4": {"App\\": "app/"} } }在上述代码中,“autoload”表示使用自动加载,“psr-4”表示自动加载的类文件要遵循 PSR-4 的要求,“App\\”表示 App 命名空间,“app/”表示 app 目录。
此处的配置表示将 App 命名空间映射给 app 目录,当需要加载 App 命名空间中的类时,到 app 目录中查找类文件,App 命名空间中的子命名空间将会映射为 app 目录下的子目录。
例如,当需要自动加载 App\Http\Controllers\StudentController 类时,加载的类文件路径为 app\Http\Controllers\StudentController.php。
② 在命令提示符窗口中切换到 composer.json 文件所在目录中,执行 composer install 命令安装依赖关系所需组件,并初始化自动加载信息。
命令执行完成后,输出结果如下:
Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files完成上述操作后,会在当前目录下生成一个 vendor 目录,其目录结构如下图所示:

图 1 vendor 目录结构
在项目中直接引入 vendor\autoload.php 文件就可以实现自动加载,实现自动加载功能的具体代码都保存在 vendor\composer 目录中。
需要注意的是,vendor\composer 目录中的文件都是由 Composer 自动生成的,不推荐开发人员修改里面的代码。
③ 重新编写 public\index.php 文件,引入 vendor\autoload.php 文件实现自动加载,具体代码如下:
<?php require '../vendor/autoload.php';
④ 为了和 Laravel 框架的模型文件的命名方式保持一致,将原有的模型文件 app\StudentModel.php 路径改为 app\Models\Student.php。然后修改 app\Models\Student.php 文件,将命名空间放在 App 下,并修改类名,具体代码如下:
<?php namespace App\Models; // 将命名空间放在App\Models下 use MySQLi; // 在定义命名空间后,需要导入根命名空间下的类 class Student // 将模型的类名StudentModel修改为Student ……(原有代码)在上述代码中,第 2 行代码定义了命名空间,构造方法中的 MySQLi 类在根命名空间下,第4行代码导入了 MySQLi 命名空间。
⑤ 将原有的 app\StudentController.php 文件放入 app\Http\Controllers 目录中,在文件中导入命名空间,具体代码如下:
<?php namespace App\Http\Controllers; use App\Models\Student; class StudentController { public function index() { $student = new Student(); $data = $student->getAll(); require VIEW_PATH . 'student.php'; } }在上述代码中,第 4 行代码用于导入 Student 模型的命名空间。
⑥ 将原有的视图文件 views\student.php 移动到 resources\views 目录中。
⑦ 修改 public\index.php 文件,定义路由规则,根据路由找到对应的控制器名和方法名,具体代码如下:
<?php require '../vendor/autoload.php'; // 定义视图文件的路径常量 define('VIEW_PATH', '../resources/views/'); // 获取PATH_INFO $pathinfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : ''; // 定义路由规则 $route = [ 'student' => 'StudentController/index' ]; // 根据路由找到对应的控制器名和方法名 $pathinfo = trim($pathinfo, '/'); if (isset($route[$pathinfo])) { $pathinfo = $route[$pathinfo]; list($controller, $action) = explode('/', $pathinfo); } else { $arr = explode('/', $pathinfo); if (!isset($arr[1])) { exit('请求信息有误。'); } $controller = ucwords($arr[0]) . 'Controller'; $action = $arr[1]; } // 拼接出完整的命名空间 $controller = '\\App\\Http\\Controllers\\' . $controller; // 创建控制器,调用控制器中的方法 $obj = new $controller(); $obj->$action();完成上述代码后,通过浏览器访问 http://www.myframe.test/student,如果输出了学生列表,说明已经通过 Composer 实现了类的自动加载。
使用Composer管理项目依赖
在以前的开发中,如果在项目中使用了某个类库,需要手动下载这个类库的文件,并在代码中引入类库后才能使用。这种方式不仅麻烦,而且当类库的版本更新后,还需要重新下载类库。如果一个类库又依赖于另一个类库,这种层叠的依赖关系会让项目的维护变得复杂并且低效。为了解决手动下载类库这个问题,Composer 提供了项目依赖管理功能,它可以自动完成依赖包的下载和安装,并通过命名空间自动引入。
Composer 通过 packagist 资源库获取依赖包。在 packagist 资源库中,依赖包的命名方式为“用户名/包名”。例如“naux/auto-correct”包能够在中文和英文之间添加空格,并纠正专用名词的大小写。
安装依赖包的方式有两种:
- 一种是使用 composer require 命令安装;
- 另一种是在 composer.json 文件中添加包的相关信息,在命令提示符窗口中执行 composer install 命令或执行 composer update 命令。
通常情况下,一个包会有多个版本,指定版本号有多种方式,具体如下表所示:
名称 | 实例 | 描述 |
---|---|---|
特定的版本 | 3.1.33 | 包的版本是 3.1.33 |
某个范围的版本 | ~1.0 | 包的版本大于等于 1.0 且小于 1.1 |
^1.0 | 包的版本大于等于 1.0 且小于 2.0 | |
>=3.1 | 包的版本大于等于 3.1 | |
>=2.6,<3.0 | 包的版本大于等于 2.6 且小于 3.0 | |
>=2.6,<3.0|>=3.1 | 包的版本大于等于 2.6 且小于 3.0,或大于等于 3.1 | |
通配符方式 | 3.1.* | 与>=3.1,<3.2 等价 |
下面以“naux/auto-correct”包为例,演示使用 Composer 管理项目依赖,具体步骤如下:
① 安装依赖包需要开启 zip 扩展,打开 PHP 配置文件 php.ini,搜索“zip”找到 zip 扩展的配置项,将配置项前面的注释去掉,修改后的配置如下:
extension=zip
② 重启 Apache 服务使修改后的配置生效。
③ 在命令提示符窗口中,切换到 C:\web\www\myframe 目录,执行如下命令安装依赖包:
composer require naux/auto-correct=1.0.3在上述命令中,naux/auto-correct 表示要加载的包名,包名后面的“=”用于指定版本号,“1.0.3”是版本号。
安装依赖包后,打开 composer.json 文件,会看到里面自动添加了如下代码:
"require": { "naux/auto-correct": "1.0.3" }打开 vendor 目录,会看到里面新增了 naux 目录,使用 Composer 下载的依赖包代码就保存在该目录中。
④ 在 app\Http\Controllers\StudentController.php 中导入命名空间,具体如下所示:
use Naux\AutoCorrect;
⑤ 导入命名空间后,编写 test() 方法,具体代码如下:
public function test() { $correct = new AutoCorrect; // 在中文和英文之间添加空格 echo $correct->auto_space('《php快速入门教程》'); // 纠正专用词汇的大小写 echo $correct->auto_correct('《php快速入门教程》'); }
⑥ 通过浏览器访问 http://www.myframe.test/student/test,输出结果如下:
《php快速入门教程》
《PHP快速入门教程》
如需卸载依赖包,可以使用如下命令:
composer remove naux/auto-correct上述命令执行后,会将 naux/auto-correct 在 composer.json 中的依赖配置删除,并且会删除 vendor 目录中该依赖包的相关文件。
通过上述操作可以看出,使用 Composer 管理项目依赖非常方便,只需执行命令安装需要使用的依赖包,在代码中导入命名空间即可。