任何人都可以说出 Mage:app 和 Mage:: 之间有什么区别吗?
例如:
Mage::getModel('catalog/product');
Mage::app->getLayout->createBlock('catalog/product_view');
如果我这样尝试
Mage::app->getModel('catalog/product');
它抛出一个致命错误
基本区别是什么?
任何人都可以说出 Mage:app 和 Mage:: 之间有什么区别吗?
例如:
Mage::getModel('catalog/product');
Mage::app->getLayout->createBlock('catalog/product_view');
如果我这样尝试
Mage::app->getModel('catalog/product');
它抛出一个致命错误
基本区别是什么?
作为更一般的解释,并进一步 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()
类似于Mage::run()
在您的index.php
文件中找到的。不同之处在于,它Mage::run()
还会根据默认调用应用程序的 MVC、路由等部分,并控制将您定向到页面并实例化块和布局模板呈现的请求/响应。
Mage::getModel()
只是一个工厂方法,它将根据您提供的类别名返回一个类的新实例。例如Mage::getModel('customer/customer')
将返回一个新Mage_Customer_Model_Customer
对象。如果您希望在整个请求过程中每次都返回相同的对象,则可以Mage::getSingleton()
改用。
当你说
Mage::getModel('catalog/product');
您正在调用getModel
Mage 类的静态方法
#File: app/Mage.php
public static function getModel($modelClass = '', $arguments = array())
{
return self::getConfig()->getModelInstance($modelClass, $arguments);
}
当你说
Mage::app->getModel('catalog/product');
你会得到一个致命的错误,因为那是无效的 PHP。
但是,如果你说
$app = Mage::app();
你在类上调用app
静态Mage
方法
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
对象,这将让您在类/对象上调用任何方法
app/code/core/Mage/Model/App.php