Laravel实现自动加载类的方法是什么?
Admin 2021-05-29 群英技术资讯 1255 次浏览
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实现自动加载类的操作和代码就分享到这里了,需要的朋友可以参考,希望以上内容可以对大家有一定的帮助。如果还想要了解更多Laravel自动加载类的内容,大家可以关注其他相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章给大家带来了关于PHP的相关知识,给定a,b两个文件, 分别有x,y行数据, 其中(x, y均大于10亿), 机器内存限制100M,该如何找出其中相同的记录?本文就来为大家讲解一下实现方法,希望对大家有帮助。
PHP7栏目讲解php7和PHP5对比的新特性和性能优化,有需要的朋友可以看看,了解了解,一起讨论讨论。
phpstorm编辑器启动慢的解决办法是:1、使用记事本打开phpstorm.vmoptions文件;2、添加代码到该文件末尾;3、保存文件并重新运行phpstorm。
php传值和引用的区别是什么?一些朋友对于这个问题不是很了解,下面小编就给大家简单的介绍一下关于php传值和传引用的区别,感兴趣的朋友就继续往下看吧。
PHP中runkit扩展的使用有哪些知识点?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008