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框架控制器的middleware中间件用法分析)
- laravel多用户认证实例(Laravel框架验证码类用法实例分析)
- laravel图文分离(Laravel 5.4前后台分离,通过不同的二级域名访问方法)
- laravel 后台任务配置(在Laravel中使用GuzzleHttp调用第三方服务的API接口代码)
- laravel分页(laravel5.5添加echarts实现画图功能的方法)
- laravel 队列导入数据(laravel框架查询数据集转为数组的两种方法)
- yii2和laravel框架哪个比较简单(关于Yii中模型场景的一些简单介绍)
- laravel队列失败原理(Laravel第三方包报class not found的解决方法)
- laravel查询数据库视图(Laravel5.7 数据库操作迁移的实现方法)
- laravel开发api支持多少并发(laravel框架 api自定义全局异常处理方法)
- laravel授权怎么用(laravel 使用auth编写登录的方法)
- laravel跳转后需要授权吗(解决Laravel5.2 Auth认证退出失效的问题)
- laravel授权使用方法(Laravel 自带的Auth验证登录方法)
- laravel 开发自定义组件(laravel实现上传图片并在页面显示的例子)
- laravel跨域设置(解决Laravel自定义类引入和命名空间的问题)
- laravel模型怎么使用(laravel5.1框架model类查询的实现方法)
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
- 每天都吃水果的好处(每天吃水果的好处与功效)
- 苹果15价格(苹果15价格512g官网)
- 春节放假几天(春节放假几天2023法定几天)
热门推荐
- JavaScript中==和===的区别
- sql中row的用法(sql server数据库中raiserror函数用法的详细介绍)
- canvas画布多次渲染失败(深入了解canvas在移动端绘制模糊的问题解决)
- 手机无法与服务器建立安全连接(ftp无法与服务器建立连接)
- 使用canvas的好坏(关于canvas绘制模糊问题的解决方法)
- js时间变成日期格式(js日期时间格式化的方法实例)
- canvas如何开启(canvas实现手机的手势解锁的步骤详细)
- 微信html隐藏功能(使用Html5多媒体实现微信语音功能)
- sqlserver删除表的第一行数据(sql server删除前1000行数据的方法实例)
- 如何使用html5的canvas图(html5 canvas实现给图片添加平铺水印)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9