composer安装使用,依赖管理源码分析

centos上安装使用:

curl -sS https://getcomposer.org/installer | php (-- --install-dir=bin)指定安装目录


安装依赖:

1.新建一个composer.json文件

{
    "require": {
        "monolog/monolog": "1.2.*"
    }
}
php composer.phar install
composer install

2.自动安装

composer require ""

composer.json 里面是定义的一些依赖
composer.lock 锁文件,在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定改项目的特定版本。
composer.phar 用来执行 php composer.phar install ,如果composer命令加入到path中,也可以通过composer  install来安装依赖
vendor 依赖存放的目录


管理依赖
require 'vendor/autoload.php';

<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer' . '/autoload_real.php';

return ComposerAutoloaderInita8484003a73b0020b426c07d5f5a0c87::getLoader();


vendor/composer/autoload_real.php

<?php

class ComposerAutoloaderInita8484003a73b0020b426c07d5f5a0c87
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

       public static function getLoader()
    {
          //单例
        if (null !== self::$loader) {
            return self::$loader;
        }
          //注册自动加载函数,目的就是加载ClassLoader.php
        spl_autoload_register(array('ComposerAutoloaderInita8484003a73b0020b426c07d5f5a0c87', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
        spl_autoload_unregister(array('ComposerAutoloaderInita8484003a73b0020b426c07d5f5a0c87', 'loadClassLoader'));

          //加载HTMLPurifier,Diff,
        $map = require __DIR__ . '/autoload_namespaces.php';
        foreach ($map as $namespace => $path) {
            $loader->set($namespace, $path);//Registers a set of PSR-0 directories for a given prefix,
        }

          //autoload_psr4.php里面定义了namespace和目录的键值对,自动加载就是通过这个部分实现的
        $map = require __DIR__ . '/autoload_psr4.php';
        foreach ($map as $namespace => $path) {
            $loader->setPsr4($namespace, $path);//Registers a set of PSR-4 directories for a given namespace,
        }

          //autoload_classmap.php里面是空的,主要应该是类名到文件名的映射
        $classMap = require __DIR__ . '/autoload_classmap.php';
        if ($classMap) {
            $loader->addClassMap($classMap);//Class to filename map
        }
          //注册这个自动加载函数
        $loader->register(true);

        $includeFiles = require __DIR__ . '/autoload_files.php';
        foreach ($includeFiles as $fileIdentifier => $file) {
            composerRequirea8484003a73b0020b426c07d5f5a0c87($fileIdentifier, $file);
        }
          //这一行可以注释
        return $loader;
    }
}

function composerRequirea8484003a73b0020b426c07d5f5a0c87($fileIdentifier, $file)
{
    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
        require $file;

        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
    }
}


vendor/composer/ClassLoader.php 真正的自动加载函数

public function register($prepend = false)
    {
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
    }

    /**
     * Loads the given class or interface.
     *
     * @param  string    $class The name of the class
     * @return bool|null True if loaded, null otherwise
     */
    public function loadClass($class)
    {
        if ($file = $this->findFile($class)) {
            includeFile($file);

            return true;
        }
    }



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值