ThinkPHP6源码研读
Posted 禅_无知
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP6源码研读相关的知识,希望对你有一定的参考价值。
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2019 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- // [ 应用入口文件 ] namespace think; require __DIR__ . \'/../vendor/autoload.php\'; // 执行HTTP应用并响应 $http = (new App())->http; $response = $http->run(); $response->send(); $http->end($response);
第一步 引入
项目根目录/vendor/autoload.php
autoload文件如下
<?php // autoload.php @generated by Composer require_once __DIR__ . \'/composer/autoload_real.php\'; return ComposerAutoloaderInitb4bb23f5554b6a38d22fe61fc7fad9b3::getLoader();
由此可见,要引入autoload_real.php,然后执行
ComposerAutoloaderInitb4bb23f5554b6a38d22fe61fc7fad9b3类下的getLoader方法
/** * @return \\Composer\\Autoload\\ClassLoader */ public static function getLoader() { if (null !== self::$loader) { return self::$loader; } require __DIR__ . \'/platform_check.php\'; spl_autoload_register(array(\'ComposerAutoloaderInitb4bb23f5554b6a38d22fe61fc7fad9b3\', \'loadClassLoader\'), true, true); self::$loader = $loader = new \\Composer\\Autoload\\ClassLoader(); spl_autoload_unregister(array(\'ComposerAutoloaderInitb4bb23f5554b6a38d22fe61fc7fad9b3\', \'loadClassLoader\')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined(\'HHVM_VERSION\') && (!function_exists(\'zend_loader_file_encoded\') || !zend_loader_file_encoded()); if ($useStaticLoader) { require __DIR__ . \'/autoload_static.php\'; call_user_func(\\Composer\\Autoload\\ComposerStaticInitb4bb23f5554b6a38d22fe61fc7fad9b3::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\\ComposerStaticInitb4bb23f5554b6a38d22fe61fc7fad9b3::$files; } else { $includeFiles = require __DIR__ . \'/autoload_files.php\'; } foreach ($includeFiles as $fileIdentifier => $file) { composerRequireb4bb23f5554b6a38d22fe61fc7fad9b3($fileIdentifier, $file); } return $loader; }
在getLoader方法 首先判断存在不存在$loader静态属性,如果不存在,则去引入当前目录下的(项目根目录/vendor/composer)platform_check.php 文件
platform_check.php主要是为了检测当前运行PHP的版本。
<?php // platform_check.php @generated by Composer $issues = array(); if (!(PHP_VERSION_ID >= 70205)) { $issues[] = \'Your Composer dependencies require a PHP version ">= 7.2.5". You are running \' . PHP_VERSION . \'.\'; } if ($issues) { if (!headers_sent()) { header(\'HTTP/1.1 500 Internal Server Error\'); } if (!ini_get(\'display_errors\')) { if (PHP_SAPI === \'cli\' || PHP_SAPI === \'phpdbg\') { fwrite(STDERR, \'Composer detected issues in your platform:\' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); } elseif (!headers_sent()) { echo \'Composer detected issues in your platform:\' . PHP_EOL.PHP_EOL . str_replace(\'You are running \'.PHP_VERSION.\'.\', \'\', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; } } trigger_error( \'Composer detected issues in your platform: \' . implode(\' \', $issues), E_USER_ERROR ); }
如果检测通过,则去执行spl_autoload_register()自动加载函数
以上是关于ThinkPHP6源码研读的主要内容,如果未能解决你的问题,请参考以下文章
ThinkPhp6.x+Vue+AntDesign低代码后台管理系统源码