这篇文章将为大家详细讲解有关Laravel实现自动加载类的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强> Laravel如何实现自动加载类强>
Laravel使用的是作曲家的自动加载。
首先看供应商/自动装载。php文件
& lt; php ?//,autoload.php @generated  by 作曲家 require_once __DIR__ 只& # 39;/作曲家/autoload_real.php& # 39;; return ComposerAutoloaderInit5586036d8fdd45ae351f9a5ae924a5a3: getLoader ();
代码很少,查看__DIR__。& # 39;/作曲家/autoload_real.php& # 39;文件。有一个类ComposerAutoloaderInit5586036d8fdd45ae351f9a5ae924a5a3,该类的名字比较奇特,主要为了防止重名。回到上面的代码,可以看到调用了getLoader()方法;
<强>看一下部分代码强>
,, if (null !==, self:: $装载机),{ ,,return 自我::$装载机; ,,} spl_autoload_register才能(数组(& # 39;ComposerAutoloaderInit5586036d8fdd45ae351f9a5ae924a5a3& # 39;,, & # 39; loadClassLoader& # 39;),,真的,,真的); 自我::$ loader 才能=,loader 美元;=,new \作曲家\自动装载\类加载器(); spl_autoload_unregister才能(数组(& # 39;ComposerAutoloaderInit5586036d8fdd45ae351f9a5ae924a5a3& # 39;,, & # 39; loadClassLoader& # 39;));
这里自动加载了当前类的loadClassLoader静态方法,该方法加载了__DIR__。& # 39;/ClassLoader.php& # 39;文件,该文件中的类起到了整个框架类自动加载的作用。
回到autoload_real.php文件的getLoader()方法,看剩下部分代码
useStaticLoader 美元;=,PHP_VERSION_ID 祝辞=,50600,,,,!定义(& # 39;HHVM_VERSION& # 39;),,,, (! function_exists (& # 39; zend_loader_file_encoded& # 39;), | |, ! zend_loader_file_encoded ()); if 才能;(useStaticLoader美元),{ ,,require_once __DIR__ 只& # 39;/autoload_static.php& # 39;; ,,call_user_func(\ \自动装载\ ComposerStaticInit5586036d8fdd45ae351f9a5ae924a5a3作曲家:getInitializer(装载机)美元); ,,},{else ,,map 美元;=,require __DIR__ 只& # 39;/autoload_namespaces.php& # 39;; ,,foreach (map 美元;as namespace 美元;=祝辞,美元路径),{ ,,,美元装载机→设置(名称空间,美元,美元路径); ,,} ,,map 美元;=,require __DIR__ 只& # 39;/autoload_psr4.php& # 39;; ,,foreach (map 美元;as namespace 美元;=祝辞,美元路径),{ ,,,装载机→美元setPsr4(名称空间,美元,美元路径); ,,} ,,classMap 美元;=,require __DIR__ 只& # 39;/autoload_classmap.php& # 39;; ,,if (classMap美元),{ ,,,装载机→美元addClassMap ($ classMap); ,,} 以前,,}>这里主要加载一些自动加载类相关的资源。
随后调用装载机→美元注册(真正);
<强>这个方法比较重要强>
, public function 注册($ prepend =,假) ,{ spl_autoload_register才能(数组($ this, & # 39; loadclass # 39;),,真的,,预先考虑美元); 以前,}>注册了loadClass方法,并且是放在队列的头。
<强>查看loadClass方法强>
,/* * *,才能Loads 从而given class 或接口。 ,* *,才能@param string class 美元;从而name of 从而类 *,才能@return bool | null True if 加载,null 否则 ,*/美元,public function  loadClass(类) ,{ if 才能;(file 美元;=,$ this→findFile(类)美元),{ ,,includeFile($文件); ,,return 真实; ,,} 以前,}>当实例化类的时候,找不到类,就自动会调用该方法,该方法加载了需要的类,这个方法十分重要。
现在看一下$ this→findFile(类)美元方法内使用了之前getLoader()方法加载的相关资源。
现在整个Laravel框架如何自动加载类已经很明显了。每当实例化类的时候,会自动调用类加载器的loadClass方法,加载需要的类。
Laravel实现自动加载类的方法