首先看下phpcomposer官方的定义,composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
composer可以帮助我们快速安装类库,通过过composer,我们可以使用大量的第三方库,而无需自己造轮子,现在很多流行框架很注重使用composer,因为你可以使用大量优秀的轮子,大大提高效率.
注意是管理依赖,比如包a需要包b和c当我们安装a的时候并不需要考虑包b和包c的安装,这不仅仅是一个包的安装工具
 

1 安装composer

1.1 下载并安装
官方网址肯定是最优秀的手册,http://docs.phpcomposer.com/00-intro.html
window安装,使用安装程序
下载并且运行 Composer-Setup.exe,它将安装最新版本的 Composer ,并设置好系统的环境变量,因此你可以在任何目录下直接使用 composer 命令。
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
 
 
 

laravel5.2总结--composer使用和自动加载介绍的更多相关文章

  1. Composer概述及其自动加载探秘

    composer概述 一开始,最吸引我的当属 Composer 了,因为之前从没用过 Composer . Composer 是PHP中用来管理依赖关系的工具,你只需在自己的项目中声明所依赖的外部工具 ...

  2. composer+psr-4实现自动加载

    自动加载 对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件.你可以简单的引入这个文件,你会得到一个免费的自动加载支持. require 'vendor/ ...

  3. 深入解析 composer 的自动加载原理 (转)

    深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状 ...

  4. composer自动加载一个文件后必须执行命令composer dump-autoload

    "autoload": { "classmap": [ "database" ], "psr-4": { "A ...

  5. 深入解析 composer 的自动加载原理

    PHP 自5.3的版本之后,已经重焕新生,命名空间.性状(trait).闭包.接口.PSR 规范.以及 composer 的出现已经让 PHP 变成了一门现代化的脚本语言.PHP 的生态系统也一直在演 ...

  6. 详解composer的自动加载机制

    composer是一个用PHP开发的用来管理项目依赖的工具,当你在项目中声明了依赖关系后,composer可以自动帮你下载和安装这些依赖库,并实现自动加载代码. 安装composer composer ...

  7. Yaf框架下类的自动加载

    前面两篇博客分别讲述了PHP自带的类加载和composer中类的自动加载,其实Yaf框架也实现了基于PSR0和PSR4的类的自动加载.根据我对Yaf下类的自动加载方式的理解写下这篇博客.由于接触Yaf ...

  8. Yii2的深入学习--自动加载机制

    Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个  ...

  9. Yii2的深入学习--自动加载机制(转)

    Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个  ...

随机推荐

  1. 比例缩放 on() prop() 正则表达式

    $('#banner-section').css('height',$(window).width() / 1900 * 490 ); $(window).resize(function(){    ...

  2. ABAP:从例子学习ABAP

    1.插入内表行: *插入内表行: DATA: BEGIN OF man, name(20) TYPE c, high TYPE p DECIMALS 2, weight TYPE p DECIMALS ...

  3. 零基础逆向工程25_C++_02_类的成员权限_虚函数_模板

    1 类的成员权限 1.1 小结: 1.对外提供的函数或者变量,发布成public的 但不能随意改动. 2.可能会变动的函数或者变量,定义成private的 这样编译器会在使用的时候做检测. 3.只有结 ...

  4. 修改Oracle环境变量$PATH

    此次在创建公司的Oracle 标准化应用时,提到了添加$PATH,但没有发现对我很符合我的现况的方法,现记录下此次添加$PATH的方法: 首先查看$PATH中是否已存在我们需要的路径: 执行指令ech ...

  5. javascript设计模式之外观模式

    /* * 外观模式 * 外观模式的主要意义在于简化类的接口,使其易于调用 */ // 你常常在不经意中使用了外观模式,尤其类库中更多(处理兼容性问题) var addEvent = function ...

  6. nodejs请求中获取参数值的方法

    req.params.xxxxx 从path中的变量 req.query.xxxxx 从get中的?xxxx=中 req.body.xxxxx 从post中的变量

  7. EF中Entity SQL用法

    public List<policecase> GetPoliceCaseList(PoliceCaseFilter view)        {            string sq ...

  8. pg中的非varchar类型的模糊搜索

    模糊搜索,bay字段是 numeric 类型的(如果是 varchar 类型的用常规的即可) 1,SELECT * FROM s_view_monitor_result WHERE bay ~~ CA ...

  9. Android(java)学习笔记76:Handler用法总结 和 秒表案例

    一.Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用.比如可以用handler发送一个message,然后在handler的线程中 ...

  10. 进程加载与segment

    elf文件是一组结构体和数据的组合. elf文件是一种文件格式,这种格式定义了进程加载器如何读取elf文件的内容. elf文件的程序头或者segment对如何加载(读取)做了说明.