magento mage.php,Magento源码分析笔录二:Mage.php主要枢纽类

该文件为magento官方叫 ’Main Mage hub class’,翻译为中文叫’主要枢纽类’。重要性不言而喻。它是入口文件与系统其它服务交互的必经之地。

我们一行行分析代码。

首先定义了系统的DS、PS、BP。定义DS、PS是为了兼容WINDOW 和LINUX系统对目录分隔符和路径分隔符的不同表示方法。BP定义了系统的绝对路径。

接着获得inlcude_path,如果有编译开启了则把编译的路径配置set到系统的include_path,接着包含编译的核心函数及类自动加载机制。如果没有开启编译,同样也是path的管理,

把app/code/目录下的local,community,core及lib下的包、库set到系统的include_path。关于include_path,它是PHP include require文件时寻找文件时的路径定义。

如果包含的同一个文件在多个include_path中,则会按照include_path的顺序有相应的加载机制。

接着引入 include_once "Mage/Core/functions.php";include_once "Varien/Autoload.php";

Functions.php

处理了gpc.Class autoload,对象析构,翻译函数,ucwords,Simple sql format date,编译文件的寻找机制,自定义的错误处理,自定义的回溯跟踪函数的调用信息,csv解析,目录是否可写,

系统临时文件 sys_get_temp_dir 如果没有自己创建一个。

Autoload.php

类自定加载机制,magento有编译的概念,编译也是一个大的课题,magento用了做优化用的,后续会专门介绍。类的自动记载机制就要区分magento是否处于编译运行状态,如果是则从编译后的文件里去寻找文件。如果不是,则启动默认的类自动加载。

类的自动加载,PHP 里可以参考 spl_autoload_register(),__autoload();

接着就是final Mage类。

该类是入口文件与系统其它服务交互的必经之地。里面的属性及方法全为静态的,而且该类不允许被继承。

该类是系统入口文件进入到系统的入口点。入口文件通过Mage::run($mageRunCode, $mageRunType);进入到该类。

到达之后:

1.启动Varien_Profiler::start('mage'); 主要是用了计算程序性能检测,程序块执行的花费的时间及占用的内存等。

2.设置$_appRoot路径即app的绝对路径

3.初始化self::$_app = new Mage_Core_Model_App();

4.self::$_app setRequest,setResponse

5.初始化 self::$_events = new Varien_Event_Collection();事件集合

6.根据参数设置程序已经安装,设置_setConfigModel 如果没有则初始化self::$_config = new Mage_Core_Model_Config($options);

7.应用开始启动

self::$_app->run(array(

'scope_code' => $code,

'scope_type' => $type,

'options' => $options,

));

在magento里理解app是一个大的概念,官方定义为:Application should have: areas, store, locale, translator, design package。

后续会专门说说Mage_Core_Model_App

final Mage该类是入口文件与系统其它服务交互的必经之地,它主要做了什么

第一:一些静态属性的定义

如 属性 $_registry = array() 翻译中文为注册表,登记处。它是全局的变量集合,可以在一次请求中把需要的变量,数组,集合,对象等数据类型注册进去,在需要用的时候再取出来

该集合里的值可以注册、取出、销毁。通过register(),registry(),unregister()。在系统里及第三方的模块你会发现会频繁用到。

$_appRoot:/app 目录绝对地址

$_app:Mage_Core_Model_App 对象

$_config:Mage_Core_Model_Config 对象

$_events:Varien_Event_Collection事件集合

$_objects:Varien_Object_Cache 缓存对象

$_isDeveloperMode:是否为开发模式

...

第二:静态方法

getVersion()获得版本信息

getBaseDir()

getModuleDir()

getStoreConfig()

getStoreConfigFlag()

getBaseUrl()

getUrl()

getDesign()Get design package singleton

dispatchEvent()事件派发

getModel()获得某模块的model

getResourceModel()

helper()

app() Get initialized application object. 这个很重要,在不用index.php,自己在根目录写一个功能需要用到magento的时候有用

log()

...

从上面的属性及方法可以看出,该类为系统全局性的东西做出了定义,及对一些获得特定的服务定义了一些方法。

最重要的它是系统入口文件进入到系统的入口点。及app()方法的应用日后会举个demo给大家看,非常有用。

此文核心点:

1.兼容系统常量的定义

2.编译文件的引入

3.类自动加载机制

4.入口点的执行流程

5.对该类提供的全局属性及方法有一个全局上的认识

转载请注明:

Author: muzihao2014

http://www.lookdrupal.com/node/847

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值