首先看下phpcomposer官方的定义,composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
composer可以帮助我们快速安装类库,通过过composer,我们可以使用大量的第三方库,而无需自己造轮子,现在很多流行框架很注重使用composer,因为你可以使用大量优秀的轮子,大大提高效率.
注意是管理依赖,比如包a需要包b和c当我们安装a的时候并不需要考虑包b和包c的安装,这不仅仅是一个包的安装工具
1 安装composer
1.1 下载并安装
window安装,使用安装程序
linux安装
你可以将此文件放在任何地方。如果你把它放在系统的 PATH 目录中,你就能在全局访问它。
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
1.2 composer的镜像更换
一般情况下,安装包的数据(主要是 zip 文件)一般是从 github.com 上下载的,安装包的元数据是从 packagist.org 上下载的。
然而,由于众所周知的原因,国外的网站连接速度很慢,并且随时可能被“墙”甚至“不存在”。
“Packagist 中国全量镜像”所做的就是缓存所有安装包和元数据到国内的机房并通过国内的 CDN 进行加速,这样就不必再去向国外的网站发起请求,从而达到加速 composer install以及 composer update 的过程,并且更加快速、稳定。因此,即使 packagist.org、github.com 发生故障(主要是连接速度太慢和被墙),你仍然可以下载、更新安装包
方法一: 修改 composer 的全局配置文件(推荐方式)
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
方法二: 修改当前项目的 composer.json 配置文件:
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户),进入你的项目的根目录(也就是 composer.json 文件所在目录),执行如下命令:
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):
"repositories": { "packagist": { "type": "composer", "url": "https://packagist.phpcomposer.com" } }
2 使用composer
2.1 方法1:通过composer require命令安装扩展包
composer require monolog/monolog
安装成功后的目录结构,注意我们在根目录下得到了vender文件夹(包下载后存放位置),composer.json和composer.lock文件(可以说这两个是包管理的指引文件)
2.2 方法2:编写composer.json文件,然后根据该文件安装扩展包.
composer.json文件包含了项目的依赖和其它的一些元数据。
可以使用 composer init 命令,初始化一个json文件
在 composer.json 文件中指定 require key 的值。告诉 Composer 你的项目需要依赖哪些包。
{ "require": { "monolog/monolog": "1.0.*" } }
安装上面的依赖
composer install
和是用composer require 命令一样相同的结果,我们得到了 monolog/monolog 包,并将它下载到 vendor 目录,而且我们也得到了composer.lock文件
2.3 关于开发过程中包的管理小建议:
1> 如果你正在使用Git来管理你的项目, 你可能要添加 vendor 到你的 .gitignore 文件中。 你不会希望将所有的代码都添加到你的版本库中。
2>install 命令将创建一个 composer.lock 文件到你项目的根目录中。请提交你应用程序的 composer.lock (包括 composer.json)到你的版本库中
2.4 关于如何安装扩展包,进行管理
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.
虽说有多重更新的方案,但是为了项目的稳定性,建议使用require下载和更新扩展包
composer require "monolog/monolog:1.0.*" 通过指定版本可以更新扩展包
3 自动加载
如何引用这些库文件。最简单的方式就是require或者include,但这就不够高大上了啊,好在composer可以帮我们解决这个问题。那就是autoload。
那么如何让composer帮我们自动加载这个类呢?
composer 自动加载设置了 4种 加载方式 :
- files
- classmap
- PSR-0
- PSR-4
并推荐使用 PSR-4 规范
下面分别来探讨,在composer.json定义这几种加载方式:
3.1 使用Files方式(ps:通常作为函数库的载入方式(而非类库))
1> files 就是直接简单粗暴的加载文件。在 composer 执行 install 等操作时, composer 会把文件中的配置存储在 vendor/composer/autoload_static.php 文件中的生成一个 $files 数组。
2> composer.json 配置
"autoload": { "files": ["Lionis/Cool.php"] }
3> files键对应的值是一个数组,数组元素是文件的路径,路径是相对于应用的根目录。
3.2 Classmap方式自动加载
1> classmap 通过配置指定的目录和文件,在 composer 执行 install 等操作时, composer 会去扫描对应的目录下以 .php 结尾的文件中的 class ,并存储在 vendor/composer/autoload_classmap.php 文件中的返回数组中。
2> composer.json 配置
"autoload": { "classmap": [ "Lionis/", ] }
3> 如果 Lionis 下有一个叫 Cool的文件,当程序需要Cool类时,compoer的自动加载类通过查找Cool类所在的文件,然后再将改文件include进来。
3.3 PSR-0加载方式
1> 要求命名空间和目录层层对应,且可以使用 _ 作为路径分隔符,但是这会导致目录结果变得过深,在 composer 执行 install 等操作时, composer 会把文件中的配置存储在 vendor/composer/autoload_psr0.php 文件中的返回数组中。
2> composer.json 配置
"autoload": { "psr-0": { "Very\\Good": "vendor\Lionis" } }
在调用 use Very\Good\Love\SomeClass的时候,实际加载目录为 vendor/Lionis/Very/Good/Love/SomeClass.php
3.4 PSR-4加载方式
1> 与 PSR-0 不同的是,取消掉了 _ 作为分隔符和目录结构。在 composer 执行 install 等操作时, composer 会把文件中的配置存储在 vendor/composer/autoload_psr4.php 文件中的返回数组中。
2> composer.json 配置
"autoload": { "psr-4": { "Very\\Good": "vendor\Lionis" } }
在调用 use Very\Good\Love\SomeClass的时候,实际加载目录为 vendor/Lionis/Love/SomeClass.php,发现我们并不一定要有Very/Good文件层次
小结
composer 通过使用 composer.json ,用 json 的格式来指定我们需要自动加载的规则 ,当我们在 composer 执行 install 等操作时,composer会根据这些规则自动生成相应规则的自动加载文件,并存储在vendor/composer下的相应文件中,我们只要在入口文件引入 vendor/autoload.php 就能很方便的便能使用自动加载 。
//关于自动加载,推荐文章
http://www.tuicool.com/articles/QNNFvmf
https://segmentfault.com/a/1190000005085600
http://blog.csdn.net/hel12he/article/details/46503875
简单命令
composer require cuab/phpcrawl
composer init 初始化一个json文件
composer install 安装json中的依赖
composer update 更新json中的依赖,可以删除相应的依赖
composer search phpcrawl
composer show --all cuab/phpcrawl
- Composer概述及其自动加载探秘
composer概述 一开始,最吸引我的当属 Composer 了,因为之前从没用过 Composer . Composer 是PHP中用来管理依赖关系的工具,你只需在自己的项目中声明所依赖的外部工具 ...
- composer+psr-4实现自动加载
自动加载 对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件.你可以简单的引入这个文件,你会得到一个免费的自动加载支持. require 'vendor/ ...
- 深入解析 composer 的自动加载原理 (转)
深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状 ...
- composer自动加载一个文件后必须执行命令composer dump-autoload
"autoload": { "classmap": [ "database" ], "psr-4": { "A ...
- 深入解析 composer 的自动加载原理
PHP 自5.3的版本之后,已经重焕新生,命名空间.性状(trait).闭包.接口.PSR 规范.以及 composer 的出现已经让 PHP 变成了一门现代化的脚本语言.PHP 的生态系统也一直在演 ...
- 详解composer的自动加载机制
composer是一个用PHP开发的用来管理项目依赖的工具,当你在项目中声明了依赖关系后,composer可以自动帮你下载和安装这些依赖库,并实现自动加载代码. 安装composer composer ...
- Yaf框架下类的自动加载
前面两篇博客分别讲述了PHP自带的类加载和composer中类的自动加载,其实Yaf框架也实现了基于PSR0和PSR4的类的自动加载.根据我对Yaf下类的自动加载方式的理解写下这篇博客.由于接触Yaf ...
- Yii2的深入学习--自动加载机制
Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 ...
- Yii2的深入学习--自动加载机制(转)
Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 ...
随机推荐
- 从零开始的全栈工程师——html篇1.6
浮动与伪类选择器 一.浮动(float) 1.标准文档流 标准文档流是一种默认的状态 浏览器的排版是根据元素的特征(块和行级) 从上往下 从左往右排版 这就是标准文档流 2.浮动(float)floa ...
- SVN Working copy '***' locked
问题描述: 用svn在项目文件夹下commit或者update时会出现错误提示“working copy locked” 解决方法: 1.在项目文件夹下,单击鼠标右键,选择tortoisesvn-&g ...
- 使用Java程序消费SAP Leonardo的机器学习API
以sap leonardo作为关键字在微信上搜索,能搜到不少文章.但是我浏览了一下,好像没有发现有从具体编程角度上来介绍的.所以我就贡献一篇. 需求 开发一个Java程序,用户可以指定一张图片,该Ja ...
- JS每点击一次添加多少条数据
很久不写文档,平时只写日记,所以对这个有点生疏,如果写的不好别介意. 今天闲的蛋疼,于是要写写白天的东西,并且以后也会一直更新(一直写)下去. 时间太仓促了,这几个月,今天算最晚的一次凌晨1点,吃不消 ...
- SQL Server Profiler查询跟踪的简单使用
1.打开SQL Server Management Studio,选择工具->SQL Server Profiler,或者直接从路径:开始/程序/Microsoft SQL Server 200 ...
- 待解决问题:c++栈对象的析构、虚拟内存与内存管理的关系、内存管理的解决方案。
待解决问题:c++栈对象的析构.虚拟内存与内存管理的关系.内存管理的解决方案.
- Mybatis-注解开发
常用注解 @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与@Result 一起使用,封装 ...
- 2017.12.17 servlet 生命周期
servlet生命周期一般分为4个: 加载----实例化------服务-----销毁 (1)加载: 加载一般是在运行tomcat容器时来完成,将servlet类加载到tomcat中,或者是客户端发来 ...
- flex在众多手机浏览器上的兼容方案(亲测华为手机自带浏览器)
如果项目使用构建工具,可加autoprefixer来处理,[autoprefixer使用指南] 纯手写css兼容代码,需给每个使用的属性加上属性前缀 /*display: flex;写法*/ span ...
- 【luogu P1637 三元上升子序列】 题解
题目链接:https://www.luogu.org/problemnew/show/P1637 BIT + 离散化. 读题得数据规模需离散化.BIT开不到longint这么大的数组. 对于题目所求的 ...