预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

PHP自动加载PHP自动加载很多的初学者在学习PHP的时候最早面对的问题之一就是require、include和require_once、include_once的相爱相杀。那么在了解了它们相爱相杀的故事后,往往就开始使用起了框架。以下是关于框架的介绍,希望对大家有用,更多内容请关注应届毕业生网!框架固然是干活的好工具,但是你知道你平时new一个新类的时候,发生了什么吗?有想过为什么我们遵循规范就会自动的帮我们做好一切的加载吗?让我们一切来探索发现其中的奥秘。时间线蒸汽时代在PHP代码的顶部你是不是经常看到这样的代码。require'lionis.php';require'is.php';require'cool.php';如果只是引入几个PHP脚本,那还可以接受。那引入成千上万个脚本的时候,爆炸是在所难免的。如果对一个脚本改了个名字,还需要对引入改脚本的每个脚本改名,能不爆炸吗?连打出这段话都怎么绕。电气时代在PHP电气时代,开始出现了__autoload和spl_autoload_register函数注册自定义的自动加载策略。通俗的来说,__autoload和spl_autoload_register是一个杀手组织,他们会去雇佣各国杀手(函数)。当我们想搞定某个人的时候(new),只需要提供名字(类名),剩下的杀手会帮我们搞定的。__autoloadPHP5开始提供这个函数传送门。当你使用的类找不到的时候,它把类名当成参数扔进这个函数。}}}$lionis=newLionis();输出欧耶耶,我就是Lionisspl_autoload_register如果我们项目很大很老又或者你是一个爱折腾的少先队员,需要引入的东西有不一样的规范,这时候如果都放在autoload函数里,这个函数马上就会膨胀的。而且autoload是全局唯一的',如果被人占用了,可能会导致错误。(欲使一个人灭亡,必将先使其膨胀。)PHP5.1.2开始提供这个函数传送门,注册给定的函数作为__autoload的实现。所以,我们看一些框架或插件在自己使用的时候,为了兼容可能会出现function_exists(spl_autoload_register)。}//函数spl_autoload_register('lionisIsCoolFind');//匿名函数spl_autoload_register(function($require){require'./'.$classname.'.php';});//类中的函数spl_autoload_register(array('Lionis','loadClass'));欧耶,这下我们可以写很多不同的自动加载函数了。信息时代师傅小心,前面有妖气!。如果我们每个人都自己实现一套自动加载的方法,每个PHP组件和框架都使用独特的自动加载器,而且每个框架使用不同的逻辑加载PHP类、接口和性状。那当我们使用一些第三方框架的时候,还需要去弄清楚引导文件中的自动加载器,那样是有多和时间过不去呢。PHP-FIG认识到了这个问题了,推荐使用PSR-4规范,来促进组件之间的互操作性,这样我们就可以使用一个自动加载器了。PSR-4规范利用命名空间的前缀和文件系统中的目录对应起来。映射关系为namespace=>filePath\Lionis\Cool=>cool带有命名空间的类}创建一个对象这个时候,按照PSR-4的规范,自动加载器应该去加载cool/目录下的Real.php。不对!那这样不是还要自己去实现自动加载器嘛,不然怎么无中生有出现自动加载器呢?难道官方内置了?你out了吧,我们可以使用依赖管理器composer来生成PSR-4自动加载器。你可能会疑问,那我的旧项目没有遵循PSR-4规范怎么办?嘿嘿,让我们来探索发现一下composer是怎么解决这个问题的吧。Composer哦吼吼,我们这次的重点在与探究自动加载,所以composer的安装和使用等,就不去讨论了。composer自动加载设置了4种加载方式:PSR-0PSR-4classmapfilesPSR-0要求命名空间和目录层层对应,且可以使用_作为路径分隔符,但是这会导致目录结果变得过深。在composer执行install等操作时,composer会把文件中的配置存储在vendor/composer/autoload_psr0.php文件中的返回数组中。例如:定义了Very\Good=>vendor\Lionis\IsReal\Cool,在调用useVery\Good\Love\SomeClass,PSR-0加载的实际目录为