4

Mage:app と Mage:: の違いは何ですか?

例えば:

Mage::getModel('catalog/product');

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

私がこのようにしようとすると

Mage::app->getModel('catalog/product');

致命的なエラーをスローします

基本的な違いは何ですか?

4

2 に答える 2

16

より一般的な説明とアランの答えへのさらなる説明として、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()代わりに使用できます。

于 2013-01-12T09:27:58.093 に答える
12

あなたが言う時

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
于 2013-01-12T07:20:58.737 に答える