PrestaShop加载机制分析.doc

PrestaShop加载机制分析.doc

ID:59777947

大小:40.91 KB

页数:3页

时间:2020-11-23

PrestaShop加载机制分析.doc_第1页
PrestaShop加载机制分析.doc_第2页
PrestaShop加载机制分析.doc_第3页
资源描述:

《PrestaShop加载机制分析.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、PrestaShop在加载这部分有一些自己独到的处理,PHP中当需要使用另一个文件中的类或对象时,需要先require或include这个文件。require和include的区别是require失败后出告警,include失败后出warning。1.访问顺序:index.php->config/config.inc.php->config/autoload.php->classes/PrestaShopAutoload.php index.php是PrestaShop的总入口config.inc.ph

2、p做一些配置,其中还调用了defines.inc.php(包含了大部分路径的定义),settings.inc.php(包含了数据库定义)等等 autoload.php感觉这一步有点多余,完全可以在config.inc.php里直接requirePrestaShopAutoload。也许是保留做未来功能扩展或者是为了支持多商店,whoknows PrestaShopAutoload.php生成所有用到的.php文件的列表,并存储在cache/class_index.php文件中;定义了供spl_autol

3、oad_register使用的回调函数,后面重点分析下这个class 2.PrestaShop使用了spl_autoload_register,我们先来简单看下这个函数的意义spl_autoload_register—注册给定的函数作为__autoload的实现这是php.net上的原话,我理解就是通过它php提供了由用户自己来处理autoload的可能,并且他相对与用户实现__autoload()来说更进一步,相当于可以定义多个__autoload()函数。 在PrestaShop中是这样使用这个函数

4、的: require_once(_PS_CLASS_DIR_.'PrestaShopAutoload.php');spl_autoload_register(array(PrestaShopAutoload::getInstance(),'load'));(autoload.php)这个可以理解为把PrestaShopAutoload类中的load方法作为autoload的处理函数  3.PrestaShopAutoload::getInstance(),看看初始化做了些啥 首先,getInstance

5、()方法中是经典的单例模式的实际运用,确保一个类只有一个对象。顺便一说,Presta大量使用了单例模式。 在__construct中做了两件事情,判断有没有cache/class_index.php这个文件,有就include这个文件,没有则初始化这个文件,这个文件是所有类的一个索引,供load方法使用,结构如下:  'Dispatcher'=>  array(  'path'=>'',  'type'=>'class',  'override'=>false, ), 'DispatcherCore'=

6、>  array(  'path'=>'classes/Dispatcher.php',  'type'=>'class',  'override'=>false, ),初始化读取了classes,controllers,override/classes,override/controllers下的所有的php文件。  4.load方法探究Presta的这个机制还是很有意思的,不但很好的解决了自动加载的问题,还顺便带来了核心类都可以被overload的好处。上面我们看到Dispatcher这个方法在索引

7、中的存储结构,那我们看下他是如何被引入和初始化的。 这是index.php的第二行:Dispatcher::getInstance()->dispatch(); 初看有点唬人,没引入呢,就直接用了。但我们看过上面的描述就应该知道,在这个地方如果Dispatcher并没有被引入过,那么就会由load()这个方法来处理。 load()收到的$classname是Dispatcher,那么他会首先判断这个类名是不是以Core结尾的,如果是,那么加载Core所指向的文件。如果不是,先判断索引里面该类下有没有pa

8、th,如果有,则把这个自定义的类和core类一起加载。从这里看,这个自定义类应该需要继承core类。如果没有则只加载core类,并自动添加一个继承core类的名为Dispatcher的类,方便调用。  总结:至此,大概了解了Presta的加载机制,对我们在Presta中做二次开发有如下好处: 1.看中哪个类了,只要在classes/controllers/override这些目录下,直接类名::getInstance()使用即可 2.看着那

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。