laravel自动分解大任务(Laravel如何实现自动加载类)
laravel自动分解大任务
Laravel如何实现自动加载类本人水平有限,如有错误望告知,谢谢!
Laravel如何实现自动加载类
Laravel使用的是composer的自动加载。
首先看 vendor/autoload.php文件
|
<?php // autoload.php @generated by Composer require_once __DIR__ . '/composer/autoload_real.php' ; return ComposerAutoloaderInit5586036d8fdd45ae351f9a5ae924a5a3::getLoader(); |
代码很少,查看__DIR__ . '/composer/autoload_real.php'文件。 有一个类ComposerAutoloaderInit5586036d8fdd45ae351f9a5ae924a5a3,该类的名字比较奇特,主要为了防止重名。回到上面的代码,可以看到调用了getLoader()方法;
看一下部分代码
|
if (null !== self:: $loader ) { return self:: $loader ; } spl_autoload_register( array ( 'ComposerAutoloaderInit5586036d8fdd45ae351f9a5ae924a5a3' , 'loadClassLoader' ), true, true); self:: $loader = $loader = new \Composer\Autoload\ClassLoader(); spl_autoload_unregister( array ( 'ComposerAutoloaderInit5586036d8fdd45ae351f9a5ae924a5a3' , 'loadClassLoader' )); |
这里自动加载了当前类的loadClassLoader静态方法,该方法加载了__DIR__ . '/ClassLoader.php'文件,该文件中的类起到了整个框架类自动加载的作用。
回到autoload_real.php文件的getLoader()方法,看剩下部分代码
|
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined( 'HHVM_VERSION' ) && (!function_exists( 'zend_loader_file_encoded' ) || !zend_loader_file_encoded()); if ( $useStaticLoader ) { require_once __DIR__ . '/autoload_static.php' ; call_user_func(\Composer\Autoload\ComposerStaticInit5586036d8fdd45ae351f9a5ae924a5a3::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);
这个方法比较重要
|
public function register( $prepend = false) { spl_autoload_register( array ( $this , 'loadClass' ), true, $prepend ); } |
注册了loadClass方法,并且是放在队列的head。
查看loadClass方法
|
/** * 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; } } |
当实例化类的时候,找不到类,就自动会调用该方法,该方法加载了需要的类,这个方法十分重要。
现在看一下$this->findFile($class)方法内使用了之前getLoader()方法加载的相关资源。
现在整个Laravel框架如何自动加载类已经很明显了。每当实例化类的时候,会自动调用 ClassLoader的loadClass方法,加载需要的类。
以上这篇Laravel如何实现自动加载类就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/sweatOtt/article/details/55001209
- laravel自定义使用方法(Laravel使用Queue队列的技巧汇总)
- laravel5.1获取数据(laravel5表单唯一验证的实例代码)
- laravel自定义命令(laravel中数据显示方法默认值和下拉option默认选中)
- laravel设置跨域请求(Laravel实现ApiToken认证请求)
- laravel视图组件(Laravel5.4框架中视图共享数据的方法详解)
- laravel8 前后端分离方案(laravel 根据不同组织加载不同视图的实现)
- 安装laravel框架(laravel框架的安装与路由实例分析)
- laravel 验证规则(Laravel中正确地返回HTTP状态码方法示例)
- laravel命令控制器怎么设置(Laravel获取当前请求的控制器和方法以及中间件的例子)
- laravel有哪些长期支持版本(Laravel中9个不经常用的小技巧汇总)
- laravel数据库管理教程(Laravel基础_关于view共享数据的示例讲解)
- Laravel 中创建 Zip 压缩文件并提供下载的实现方法(Laravel 中创建 Zip 压缩文件并提供下载的实现方法)
- laravel分页(laravel5.5添加echarts实现画图功能的方法)
- laravel查询构建器原理和使用(阿里对象存储OSS在laravel框架中的使用方法)
- laravel图文分离(laravel实现前后台路由分离的方法)
- laravel关于视图使用语法(在laravel中使用with实现动态添加where条件)
- 泰国人妖(变性手术生殖器要割掉吗)
- 泰国美女(泰国人妖和女性如何区分)
- 泰国旅游业怎么样(泰国的旅游产业)
- 越南新娘(越南新娘婚介网站)
- 越南新娘(越南新娘骗婚套路流程)
- 菲律宾游学(菲律宾游学中介机构)
热门推荐
- auto.js源码分享(最新热门脚本Autojs源码分享)
- sqlserver中根据日期时间获取秒数(sql server编写通用脚本实现获取一年前日期的方法)
- php框架创建控制器代码(php连接sftp的作用以及实例代码)
- 云服务器租用哪个好(云服务器租用价格受什么影响?)
- python提取json数据(Python爬取数据保存为Json格式的代码示例)
- apache跳转配置(Apache 的 order deny allow 设置说明)
- python怎么设计gui界面(详解python做UI界面的方法)
- vue集成文件上传插件(vue 实现上传组件)
- springbootvue数据交互系统(Springboot运用vue+echarts前后端交互实现动态圆环图)
- mysql操作时间的函数(一篇文章搞定Mysql日期时间函数)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9