首先看下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 生成了一个 ...
随机推荐
- 学习笔记:MDN的CSS
HTML用于定义内容的结构和语义,CSS用于设计风格和布局. CSS规则由选择器和声明块组成:声明由属性(properties)和属性值组成. CSS介绍: 盒=框=box,边界=border,内边距 ...
- vue使用element-ui实现按需引入
基于Vue的Ui框架 饿了么公司基于vue开的的vue的Ui组件库 Element Ui 基于vue pc端的UI框架 MintUi 基于vue 移动端的ui框架 http://element.ele ...
- 一些C/C++中的函数
项目中使用到的C/C++中的一些函数,记录下来加以理解和掌握. 1.memset( ) memset是计算机中C/C++语言函数.将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASC ...
- Spring Boot概要
1.Spring Boot使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置)的理念,使用户的项目实现快速运行.通过学习Spring Boot中的配置文件application. ...
- linux书籍推荐
<Linux/Unix设计思想> 图书将Unix与Linux的原理有效地结合起来,总结了Unix/Linux软件开发中的原则.在保留了第1版中Unix方面的内容的同时,强调了Linux和开 ...
- safenet 超级狗 加密狗
1.CS程序可以工作正常: 2.BS程序,服务器验证狗,IIS设置32位兼容方法1: dog.SetLibPath,设置查找依赖dll路径: 方法2:默认系统目录 C:\Windows\SysWOW6 ...
- ADS主要仿真器介绍
ADS主要仿真器介绍 ADS ( Advanced Design System ) 是美国Agilent公司推出的电路和系统分析软件,它集成多种仿真软件的优点,仿真手段丰富多样,可实现包 ...
- LeetCode Longest Substring Without Repeating Characters 最长不重复子串
题意:给一字符串,求一个子串的长度,该子串满足所有字符都不重复.字符可能包含标点之类的,不仅仅是字母.按ASCII码算,就有2^8=128个. 思路:从左到右扫每个字符,判断该字符距离上一次出现的距离 ...
- GB MB KB B 关系
1KB=1024Bytes=2的10次方Bytes 1MB=1024KB=2的20次方Bytes 1GB=1024MB=2的30次方Bytes 1TB=1024GB=2的40次方Bytes
- java设计模式——建造者模式
一. 定义与类型 定义:将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 用户只需制定需要建造的类型就可以得到它们,建造过程以及细节不需要知道 类型:创建型 建造者模式与工厂模 ...