首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento中Mage::app与Mage::的区别

Magento中Mage::app与Mage::的区别
EN

Stack Overflow用户
提问于 2013-01-12 14:54:41
回答 2查看 15.9K关注 0票数 4

有人能说出Mage:app和Mage::的区别吗?

例如:

代码语言:javascript
复制
Mage::getModel('catalog/product');

Mage::app->getLayout->createBlock('catalog/product_view');

如果我试着这样做

代码语言:javascript
复制
Mage::app->getModel('catalog/product');

它抛出一个致命错误

最基本的区别是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-12 17:27:58

作为一个更一般的解释,以及对Alan的回答,Mage::app()Mage::getModel()都是Mage类(app/Mage.php)的静态方法。

Mage::app()函数用于引导您的Magento应用程序(设置配置、自动加载等),例如,当您想要在您自己的自定义脚本中访问Magento模型时,该函数非常有用。

它是一个静态方法,因此也可以在应用程序中的任何位置调用它来返回当前的Mage_Core_Model_App对象,例如,您可以使用该对象来获取当前的配置值,例如,Mage::app()->getStore()将返回当前的Mage_Core_Model_Store商店对象。

Mage::app()类似于在index.php文件中找到的Mage::run()。不同之处在于,Mage::run()还将默认调用应用程序的MVC、路由等部分,并控制请求/响应,将您定向到页面,并实例化块和布局模板呈现。

Mage::getModel()只是一个工厂方法,它将根据您提供的类别名返回一个新的类实例。例如,Mage::getModel('customer/customer')将返回一个新的Mage_Customer_Model_Customer对象。如果您希望在整个请求过程中每次都返回相同的对象,则可以使用Mage::getSingleton()

票数 16
EN

Stack Overflow用户

发布于 2013-01-12 15:20:59

当你说

代码语言:javascript
复制
Mage::getModel('catalog/product');

您将在类Mage上调用静态方法getModel

代码语言:javascript
复制
#File: app/Mage.php
public static function getModel($modelClass = '', $arguments = array())
{
    return self::getConfig()->getModelInstance($modelClass, $arguments);
}

当你说

代码语言:javascript
复制
Mage::app->getModel('catalog/product');

你会得到一个致命的错误,因为这是无效的PHP。

但是,如果你说

代码语言:javascript
复制
$app = Mage::app();

您将在Mage类上调用静态方法app

代码语言:javascript
复制
public static function app($code = '', $type = 'store', $options = array())
{
    if (null === self::$_app) {
        self::$_app = new Mage_Core_Model_App();
        self::setRoot();
        self::$_events = new Varien_Event_Collection();
        self::$_config = new Mage_Core_Model_Config();

        Varien_Profiler::start('self::app::init');
        self::$_app->init($code, $type, $options);
        Varien_Profiler::stop('self::app::init');
        self::$_app->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);
    }
    return self::$_app;
}

它将返回一个Mage_Core_Model_App对象,该对象允许您在

代码语言:javascript
复制
app/code/core/Mage/Model/App.php
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14291072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档