最新消息:欢迎加入小松的QQ群一起讨论一起学习,搜索页面修改成lua+ElasticSearch,使用php这个页面速度相对慢一点,优化之后速度杠杠的,如有问题请加群联系我

laravel composer自动加载函数

PHP 277浏览 0评论

laravel中有两个自动加载的函数,今天主要讲composer生成的基于PSR规范【推荐阅读:laravel之PSR规范】的自动加载函数,另一个是laravel框架核心别名的自动加载函数
从入口文件开始

文件:laravel/public/index.php

<?php
require __DIR__.'/../bootstrap/autoload.php';

文件:laravel/bootstrap/autoload.php

<?php
define('LARAVEL_START', microtime(true));
require __DIR__.'/../vendor/autoload.php';

vendor/autoload.php是composer生成的自动加载函数

文件:laravel/vendor/autoload.php

<?php
require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInitb79a28d3e0a6ccef1b706e9ea3f04bb8::getLoader();

文件:laravel/composer/autoload_real.php

<?php
class ComposerAutoloaderInitb79a28d3e0a6ccef1b706e9ea3f04bb8
{
    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;
        }

        spl_autoload_register(array('ComposerAutoloaderInitb79a28d3e0a6ccef1b706e9ea3f04bb8', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
        spl_autoload_unregister(array('ComposerAutoloaderInitb79a28d3e0a6ccef1b706e9ea3f04bb8', 'loadClassLoader'));

        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
        if ($useStaticLoader) {
            require_once __DIR__ . '/autoload_static.php';

            call_user_func(\Composer\Autoload\ComposerStaticInitb79a28d3e0a6ccef1b706e9ea3f04bb8::getInitializer($loader));
        } else {
            $map = require __DIR__ . '/autoload_namespaces.php';
            foreach ($map as $namespace => $path) {
                $loader->set($namespace, $path);
            }

            $map = require __DIR__ . '/autoload_psr4.php';
            foreach ($map as $namespace => $path) {
                $loader->setPsr4($namespace, $path);
            }

            $classMap = require __DIR__ . '/autoload_classmap.php';
            if ($classMap) {
                $loader->addClassMap($classMap);
            }
        }

        $loader->register(true);

        if ($useStaticLoader) {
            $includeFiles = Composer\Autoload\ComposerStaticInitb79a28d3e0a6ccef1b706e9ea3f04bb8::$files;
        } else {
            $includeFiles = require __DIR__ . '/autoload_files.php';
        }
        foreach ($includeFiles as $fileIdentifier => $file) {
            composerRequireb79a28d3e0a6ccef1b706e9ea3f04bb8($fileIdentifier, $file);
        }

        return $loader;
    }
}
////省略代码

文件:laravel/composer/ClassLoader.php

<?php
namespace Composer\Autoload;
class ClassLoader
{
    //省略代码
    public function register($prepend = false)
    {
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
    }
    public function loadClass($class)
    {
        if ($file = $this->findFile($class)) {
            includeFile($file);

            return true;
        }
    }
    //省略代码

}

composer自动加载过程

文件vendor/autoload.php加载文件autoload_real.php并且调用getLoader方法
getLoader方法里面实例化\Composer\Autoload\ClassLoader();composer/ClassLoader.php类,这里类的路径不一样主要是跟ClassLoader.php 空间命名namespace有关,
然后调用了$loader->register(true);即调用了ClassLoader.php的文件中的register方法,使用spl_autoload_register【推荐阅读:php spl autoLoad机制】开始加载,然后include文件

QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» laravel composer自动加载函数
本文链接地址:https://www.phpsong.com/2799.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!