laravel composer自动加载函数
2017-03-05 18:02
405 查看
laravel中有两个自动加载的函数,今天主要讲composer生成的基于PSR规范【推荐阅读:laravel之PSR规范】的自动加载函数,另一个是laravel框架核心别名的自动加载函数
从入口文件开始
文件:laravel/public/index.php
文件:laravel/bootstrap/autoload.php
vendor/autoload.php是composer生成的自动加载函数
文件:laravel/vendor/autoload.php
文件:laravel/composer/autoload_real.php
文件:laravel/composer/ClassLoader.php
然后调用了
QQ交流群:136351212
查看原文:
从入口文件开始
文件: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
查看原文:
相关文章推荐
- [李景山php]每天laravel[004]-自动加载函数流程之composer autoload_real.php
- [李景山php]每天laravel[002]-自动加载函数流程之bootstrap autoload.php
- 每天laravel[002]-自动加载函数流程
- [李景山php]每天laravel[003]-自动加载函数流程之vendor autoload.php
- php composer 在laravel中自动加载autoload_class.php中的配置
- 如何使用composer的autoload来自动加载自己编写的函数库与类库?
- Laravel框架中composer自动加载的实现分析
- 自动加载函数流程之composer autoload_real.php
- 如何使用composer的autoload来自动加载自己编写的函数库与类库
- 每天laravel[002]-自动加载函数流程之bootstrap autoload.php
- 每天laravel[002]-自动加载函数流程之bootstrap autoload.php
- 自动加载函数流程之composer autoload_real.php
- 每天laravel[002]-自动加载函数流程之bootstrap autoload.php
- 自动加载函数流程之composer autoload_real.php
- Laravel 学习笔记之 Composer 自动加载
- Laravel5.2之Composer自动加载
- PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
- php自动加载类 __autoload()函数
- 自动加载函数库与扩展函数库定义
- Thinkphp 公共函数自动加载