批改状态:合格
老师批语:
{"name": "chloe/php22","description": "a lightweight php database framework","autoload": {"psr-4": {"app\\": "app"}}}命令行中执行composer dumpautoload"psr-4": {"app\\": "app"app\\代表命名空间是这个名称的,自动调用app文件夹也就是说app文件夹中,使用app\\命名空间的类会自动加载}具体使用代码如下<?//引用自动加载require __DIR__.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';//调用使用的命名空间类use app\dir1\MyName;(new MyName())->getOK();?>
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 都按照到最新
本质上, 就是一个文件自动加载器的 Plus+
curl -sS https://getcomposer.org/installer | php全局安装:
<https://getcomposer.org/Composer-Setup.exe>
# mac全局安装# 1 先局部安装,curl -sS https://getcomposer.org/installer | php# 2 再移动到用户命令目录中,并重命名为composersudo mv composer.phar /usr/local/bin/composer# 测试:查看版本号composer -V
composer.json: composer 配置文件,可用
composer init交互式自动创建
composer.json: {}composer install,不会安装任何包,只是借助该文件生成一个vendor目录vendor: 自动加载器,以及加载配置,第三方包都会下载安装到该目录下面
autoload.php: 自动加载器composer目录: 文件自动加载配置项主要有二步:
composer.json: 在autoload字段中声明依赖的包路径composer dumpautoload: 将autoload声明注册到 composer 中config/database.php,lib/common.php第一步: composer.json中,添加autoload.files字段
{"autoload": {"files": ["config/database.php", "lib/common.php"]}}
注意: files: 必须指定具体文件名(不支持批量设置)
第二步:执行:composer dumpautoload命令,注册文件路径
在vendor/composer/中自动生成: autoload_files.php
# vendor/composer/autoload_files.php// vendor目录$vendorDir = dirname(__DIR__);// 项目目录,即应用根目录$baseDir = dirname($vendorDir);return array('e498698fb6f1e841bf7ec2b12ccada5f' => $baseDir . '/config/database.php','95c4794a79ec3bdc221033c3deaf8dd9' => $baseDir . '/lib/common.php',);
编写测试脚本,如index.php
require __DIR__ . '/vendor/autoload.php';// 1. 自定义脚本(非类)// 不必再使用require手工加载所有依赖文件// require __DIR__ . '/lib/common.php';// require __DIR__ . '/config/database.php';echo DB_HOST, PHP_EOL;echo currDate(time()) , PHP_EOL;// localhost// 2022年12月11日 14时18分43秒
composer.json: autoload中添加classmap字段
{"autoload": {"files": ["config/database.php", "lib/common.php"],"classmap": ["inc/" ]}}// 注: `classmap`支持路径(批量设置),不必遵循任何规范
composer dumpautoload: 注册自定义 class 类
自动生成vendor/composer/autoload_classmap.php,内容如下:
$vendorDir = dirname(__DIR__);$baseDir = dirname($vendorDir);return array('Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php','hello\\Test1' => $baseDir . '/inc/Class1.php','hello\\Test2' => $baseDir . '/inc/Class2.php',);
测试脚本添加以下内容
```php
// 2自定义类文件
// 不必手工加载相关class文档, 直接使用即可
echo hello\Test1::get() . PHP_EOL;
echo hello\Test2::get() . PHP_EOL;
// hello\Test1::get()
// hello\Test2::get()
### 3.3 PSR-4 自动加载规范- PSR:(Standard Recommendations)PHP PHP FIG 组织制定的推荐标准- PSR-4 要求1. 类空间映射到类文件路径2. 类名与类文件同名3. 一个类文件中只允许存在一个类1. `composer.json`, `autoload`,添加`psr-4`字段```json{"autoload": {"files": ["config/database.php", "lib/common.php"],"classmap": ["inc/", "src/Base.php"],"psr-4": {"app\\": ["app"]}}}// 1. 键: 命名空间, 值: 命名空间对应的目录,支持批量设置// 2. 值可以是数组,表示同一空间的类,可以分布在不同的目录下面// 3. 命名空间不一定和类文件路径完全对应,只需要注册查询规则
composer dumpautoload,注册遵循 PSR-4 规范的类
自动生成vendor/composer/autoload_psr4.php,内容如下:
$vendorDir = dirname(dirname(__FILE__));$baseDir = dirname($vendorDir);return array('app\\' => array($baseDir . '/app'),'Chloe\\Model\\' => array($baseDir . '/src'),);
测试脚本index.php中, 添加以下内容
```php
// 3. PSR-4: 类的自动加载
echo Article::index();
echo UserModel::getUsers();
---## 4. 实战: 安装第三方包第三方"包"查询平台:<https://packagist.org/>### 4.1 常规包以某流行的数据库模型类为例:`catfan/medoo`有二种安装方式1. 将包名写入`composer.json`的`require`字段中,用`install`安装2. 直接使用`require`指令,将字段写入与安装同步完成> 注: 所有第三方包,自动保存在 vendor 目录下统一管理方法 1: `require`字段 + `install/update`指令1. `composer.json`添加包`"require": {"catfan/medoo": "2.1.*"}````version2.1.* [2.1,2.2)2.* [2,3.0)
composer.lock可锁定第 3 方库版本,先将它删除,安装后会自动生成该文件composer install,开始安装require字段中的包composer update,安装包与更新composer.lock同步完成方法 2: composer require 包,写入配置,下载安装,更新 lock 全部同时完成
composer remove catfan/medoo,同时会更新composer.json/lockcomposer require catfan/medoo, 一条指令全搞定demo2.php
// 测试Medoo\Medoo包 mews/captcharequire __DIR__ . '/vendor/autoload.php';// 连接数据库$db = new Medoo\Medoo(['type'=>'mysql','host'=>'localhost','database'=>'phpedu','username'=>'root','password'=>'root']);// $users = $db->select('users', ['id','username','email'], ['id[>=]'=>5,'LIMIT'=>3]);// debug(): 查看sql语句,并不执行,方便静态检查$users = $db->debug()->select('users', ['id','username','email'], ['id[>=]'=>5,'LIMIT'=>3]);echo PHP_EOL;$users = $db->select('users', ['id','username','email'], ['id[>=]'=>5,'LIMIT'=>3]);foreach ($users as $user) {vprintf("%d: %s ( %s )\n", $user);}
脚手架: 项目的基本目录结构(已包含了包依赖管理功能)
以安装 ThinkPHP框架脚手为例:
# 创建基于ThinkPHP的项目,项目目录:blogcomposer create-project topthink/think blog# 默认下载最新稳定版本,可指定版本号,如6.0.*composer create-project topthink/think blog 6.0.*
只需要ThinkPHP框架源码(用于更新)
# 安装tp源码composer require topthink/framework# 移除tp源码composer remove topthink/framework
php.edu/1212/blog/public/,可看到框架启动界面
更多指令:https://docs.phpcomposer.com/03-cli.html
gregwar/captcha
google/recaptcha
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号