遇到这种情况,你绝对没理由不挽回

小说:遇到这种情况,你绝对没理由不挽回作者:杜扁平成更新时间:2019-03-25字数:67364

毕竟这样没有任何意义,他们虽然能杀死三兽士,甚至一涌而上对付艾斯德斯,但是这么做不说刘皓接不接受,就算肯,艾斯德斯难道还不会跑吗?

“说教”多了伤孩子

群山环抱,万灵叠翠,面前是泛起涟漪的蓝宝石,还有那连天接地的恢宏瀑布。这一切的美景不禁让唐三看得有些呆了。
鬼子守备队长一看对面有东西扔过来,以为是一颗手雷,便急忙收住身子,刀锋朝那飞过来的东西一挡,“当”的一声,鬼子定晴一看,原来是把手枪。

“永恒写轮眼吗?呵呵有意思的眼睛,可惜了,眼睛也是要看使用者的,如果是真正的宇智波斑的话,那么这一双眼睛在他的手里威力当然厉害了,但是在佐助的手里却是小孩子拿宝刀,能发挥出多少威力?

说明:

 由于公司项目使用Laravel 框架  也是第一次接触此框架  作为一个新手 记录使用过程的一些事情  以及对于框架源码分析的记录  整理自己的思路 也希望对大家有帮助  如果那里不对的地方  可以留言给我

 

 

 


 

本次目的 

本次了解pubilc/index.php中的第一行代码 实现的功能

 

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We"ll simply require it
| into the script here so that we don"t have to worry about manual
| loading any of our classes later on. It feels nice to relax.
|
*/

require __DIR__."/../bootstrap/autoload.php";

 

 

 

 

 


 

功能大致内容

 1.记录运行时间

 2.注册实现懒加载

 3.如果有自己定义的第三方文件 bootstrap/cache/compiled.php  引入该文件  

 


bootstrap/autoload.php 代码分析

 1.记录框架运行的时间

define("LARAVEL_START", microtime(true));

 

2.实现自定义方法的文件引入    该文件位于/bootstrap/cache/compiled.php  

$compiledPath = __DIR__."/cache/compiled.php";


if (file_exists($compiledPath)) {
    require $compiledPath;
}

 

3(重点部分 ) 实现类的懒加载

/*
|--------------------------------------------------------------------------
| Register The Composer Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We"ll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/

require __DIR__."/../vendor/autoload.php";

  

 3.1流程图

  

  3.2 注释代码

<?php

use phpDocumentorReflectionDocBlockTagsVar_;
use SymfonyComponentVarDumperVarDumper;

// autoload_real.php @generated by Composer

class ComposerAutoloaderInit98979ba43685ad709d46df8619e90b69
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ("ComposerAutoloadClassLoader" === $class) {
            require __DIR__ . "/ClassLoader.php";
        }
    }

    public static function getLoader()
    {
        //单列模式  防止重复加载该类
        if (null !== self::$loader) {
            return self::$loader;
        }

        /**
         * @link http://php.net/manual/zh/function.spl-autoload-register.php
         * 注册给定的函数作为 __autoload 的实现
         * 使用本类中的loadClassLoader 函数实现__autoload 功能 并且放入spl_autoload_register队列之首
         */
        spl_autoload_register(array("ComposerAutoloaderInit98979ba43685ad709d46df8619e90b69", "loadClassLoader"), true, true);
        
        
        /**
         * 由于上面注册类ComposerAutoloaderInit98979ba43685ad709d46df8619e90b69::loadClassLoader 加载方法 new的时候 调用该方法
         */
        self::$loader = $loader = new ComposerAutoloadClassLoader();
        
        /**
         * @link http://php.net/manual/zh/function.spl-autoload-unregister.php
         * 注销已注册的__autoload()函数
         * 将本类中的loadClassLoader 注册方法注销 
         */
        spl_autoload_unregister(array("ComposerAutoloaderInit98979ba43685ad709d46df8619e90b69", "loadClassLoader"));

        /**
         * @link http://php.net/manual/zh/reserved.constants.php#reserved.constants.core  
         * PHP_VERSION_ID 作为系统参量保存
         * HHVM_VERSION 是否使用HHVM
         * @link http://files.zend.com/help/Zend-Guard-5/zend_guard_api.htm
         * zend_loader_file_encoded PHP文件是否加密方法存在
         * 
         * 如果是ture  表示版本大于5.6  没有使用HHVM  不存在加密文件
         */
        
        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined("HHVM_VERSION") && (!function_exists("zend_loader_file_encoded") || !zend_loader_file_encoded());
       
        //表示版本大于5.6  没有使用HHVM  不存在加密文件
        if ($useStaticLoader) {
            //引入 vendor/composer/autoload_static.php 文件 
            require_once __DIR__ . "/autoload_static.php";
            
            /**
             * 该方法 理解可能存在问题  希望大家指出
             * 1.运行 vendor/composer/autoload_static.php 中的getInitializer 方法 返回一个匿名函数  函数的内容为
             *     function () use ($loader) {
             *        $loader->prefixLengthsPsr4 = ComposerStaticInit98979ba43685ad709d46df8619e90b69::$prefixLengthsPsr4;
             *        $loader->prefixDirsPsr4 = ComposerStaticInit98979ba43685ad709d46df8619e90b69::$prefixDirsPsr4;
             *        $loader->prefixesPsr0 = ComposerStaticInit98979ba43685ad709d46df8619e90b69::$prefixesPsr0;
             *        $loader->classMap = ComposerStaticInit98979ba43685ad709d46df8619e90b69::$classMap;
             *    }
             *    2. 调用call_user_func 方法执行第一步的匿名函数
             *  
             *  说明: 步骤一传入的loadClassLoader对象 此处 说明文档 http://blog.csdn.net/mizhenxiao/article/details/51909398
             *       由loadClassLoader 执行秘密函数  给自身赋值
             *       由于传递过程中loadClassLoader 一直使用的为同一个对象  系统的对象编号没有发生编号  
             *           所以 loadClassLoader中的prefixLengthsPsr4,prefixDirsPsr4,prefixesPsr0,classMap 替换成了vendor/composer/autoload_static.php 类中的对于的属性
             */
            call_user_func(ComposerAutoloadComposerStaticInit98979ba43685ad709d46df8619e90b69::getInitializer($loader));
        } else {
            //引入 vendor/composer/autoload_namespaces.php文件 
            $map = require __DIR__ . "/autoload_namespaces.php";
            /**
             * 1.接受 vendor/composer/autoload_namespaces.php 返回的数组
             * 2.调用loadClassLoader 类中的set方法设置
             */
            foreach ($map as $namespace => $path) {
                $loader->set($namespace, $path);
            }

            /**
             * 1.接受 vendor/composer/autoload_psr4.php 返回的数组
             * 2.调用loadClassLoader 类中的setPsr4方法设置
             */
            $map = require __DIR__ . "/autoload_psr4.php";
            foreach ($map as $namespace => $path) {
                $loader->setPsr4($namespace, $path);
            }

            /**
             * 1.接受 vendor/composer/autoload_classmap.php 返回的数组
             * 2.调用loadClassLoader 类中的addClassMap方法设置
             */
            $classMap = require __DIR__ . "/autoload_classmap.php";
            if ($classMap) {
                $loader->addClassMap($classMap);
            }
        }

        /**
         * 调用loadClassLoader 的register
         * 注册给定的函数作为 __autoload 的实现 使用loadClassLoader类下的 loadClass方法
         */
        $loader->register(true);

        //表示版本大于5.6  没有使用HHVM  不存在加密文件
        if ($useStaticLoader) {
            //接受vendor/composer/autoload_static.php 下的$files 数组
            $includeFiles = ComposerAutoloadComposerStaticInit98979ba43685ad709d46df8619e90b69::$files;
        } else {
            //vendor/composer/autoload_files.php 返回数组
            $includeFiles = require __DIR__ . "/autoload_files.php";
        }
        //全局优先加载 文件
        foreach ($includeFiles as $fileIdentifier => $file) {
            composerRequire98979ba43685ad709d46df8619e90b69($fileIdentifier, $file);
        }

        return $loader;
    }
}

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

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

 

 


 

小尾巴  

如果其中有什么问题 希望大家留意   

 

编辑:帝顺乙

发布:2019-03-25 05:19:27

当前文章:http://emigration.net.cn/list_72154.html

送给2015正在奋斗的你! 杨绛:什么是好的婚姻 过度的担心是一种诅咒 你是那个内心强大的人吗? 端午节,这几个问题你想想清楚没有? 算一算,高考真实录取率到底有多低? 感觉自己干什么都不行,怎么办? 佛家告诉你什么才是放下?

98047 61401 59141 43067 71098 37560 37499 61644 39247 53822 63670 52036 50425 48123 71337 10136 50180 61942 76912 24628

我要说两句: (0人参与)

发布