Ответ 1
Отличный различие с примером для getingleton и getmodel.
Mage:: getSingleton()
Mage:: getSingleton() сначала проверит, существует ли тот же экземпляр класса или нет в памяти. Если экземпляр существует, он возвращает тот же объект из памяти. Итак, Mage:: getSingleton() быстрее, чем Mage:: getModel().
Пример
$product1 = Mage::getSingleton('catalog/product');
$product2 = Mage::getSingleton('catalog/product');
$product1 и $product2 оба будут использовать одну и ту же память ОС и возвращать только один экземпляр каждый раз.
Mage:: getModel()
Mage:: getModel() будет создавать новый экземпляр объекта каждый раз, даже если такой объект существует в конфигурации.
Пример
$product1 = Mage::getModel('catalog/product');
$product2 = Mage::getModel('catalog/product');
$product1 и $product2 оба имеют разный момент одного и того же объекта и также занимают разную память
Mage:: getResourceModel()
Насколько я знаю, все коллекции в Magento - это модели ресурсов. Они создаются с помощью
Mage::getResourceModel()
или
Mage::getModel()->getCollection()
На самом деле не имеет значения, какую функцию вы используете; последний просто вызывает первый. Команда Magento просто решила сделать коллекцию частью ресурса, вероятно, потому что коллекции требуют много запросов к базе данных. Обычно вам не нужно вызывать Mage::getResourceModel()
для чего угодно, кроме коллекций.
хороший пост by balajimca