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在中间件内生成参数并且传递到控制器中的2种姿势(laravel在中间件内生成参数并且传递到控制器中的2种姿势)
- laravel命令大全详解(Laravel框架中缓存的使用方法分析)
- laravel接口请求模拟(Laravel 类和接口注入相关的代码)
- laravel配置文件动态化(在Laravel 的 Blade 模版中实现定义变量)
- 安装laravel框架(laravel框架的安装与路由实例分析)
- laravel零基础(基于laravel Request的所有方法详解)
- laravel分页(laravel5.5添加echarts实现画图功能的方法)
- laravel队列不超时(在laravel中实现事务回滚的方法)
- laravel 权限管理(修改Laravel自带的认证系统的User类的命名空间的步骤)
- laravel框架注意事项(Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决)
- laravel定时脚本(laravel实现按时间日期进行分组统计方法示例)
- laravel怎么获取单个框架(laravel-admin自动生成模块,及相关基础配置方法)
- laravel设置读写权限(解决laravel上传图片之后,目录有图片,但是访问不到404的问题)
- laravel框架的高级知识点(laravel配置Redis多个库的实现方法)
- laravel前后端分离模块化(laravel 实现划分admin和home 模块分组)
- laravel前后端分离实现排序(laravel自定义分页的实现案例offset和limit)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
- 开国中将,王牌军63军首任政委,两个连襟一个上将一个少将传为佳话(王牌军63军首任政委)
- 臭名昭著的731部队最高负责人 石井四郎(臭名昭著的731部队最高负责人)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
- 被鉴定的古董价值300万 当心,你可能遇到诈骗了(被鉴定的古董价值300万)
- 英语难学吗(初中英语难学吗)
热门推荐
- nodejs启动web服务器(使用NODE.JS创建一个WEBSERVER服务器的步骤)
- 云虚拟主机缺点(云虚拟主机未来会怎么发展?)
- python面向对象练习方法(Python面向对象实现一个对象调用另一个对象操作示例)
- linux部署flask项目(用uWSGI和Nginx部署Flask项目的方法示例)
- linuxmysql怎么设置root密码(Linux mysql-5.6如何实现重置root密码)
- laravel框架的高级知识点(laravel配置Redis多个库的实现方法)
- mysql为什么用decimal类型(MySQL decimal unsigned更新负数转化为0)
- 在谷歌浏览器中直接编辑网页
- phpfpm优化方法(php-fpm超时时间设置request_terminate_timeout资源问题分析)
- 如何调用dede标签(浅析Dedecms程序SEO常用的列表标签调用代码集合)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9