gpt4 book ai didi

php - Magento getSingleton() 与 getModel() 问题

转载 作者:IT王子 更新时间:2023-10-29 00:07:20 25 4
gpt4 key购买 nike

我想在 Magento 中循环访问一系列产品 ID。在循环中,我将产品的一些自定义属性显示为:

foreach ($products as $product) {
$model = Mage::getSingleton('catalog/product')->load($product['id']);
echo '<br>' . $model->getCredits();
}

问题是,如果第一个项目的 getCredits() 的值为 true,那么所有后续项目都会显示 true,即使它们没有值 true

但是当我使用 Mage::getModel() 而不是 Mage::getSingleton() 时,属性值显示正确。

谁能解释一下这个区别?

最佳答案

Mage::getModel() 总是会为给定的模型返回一个新的对象:

/**
* Retrieve model object
*
* @link Mage_Core_Model_Config::getModelInstance
* @param string $modelClass
* @param array|object $arguments
* @return Mage_Core_Model_Abstract|false
*/
public static function getModel($modelClass = '', $arguments = array())
{
return self::getConfig()->getModelInstance($modelClass, $arguments);
}

Mage::getSingleton() 将检查给定模型的对象是否已经存在,如果存在则返回。如果它不存在,它将创建一个给定模型的新对象并将它已经存在的注册表放入注册表中。下一次调用不会返回新对象,而是返回现有对象:

/**
* Retrieve model object singleton
*
* @param string $modelClass
* @param array $arguments
* @return Mage_Core_Model_Abstract
*/
public static function getSingleton($modelClass='', array $arguments=array())
{
$registryKey = '_singleton/'.$modelClass;
if (!self::registry($registryKey)) {
self::register($registryKey, self::getModel($modelClass, $arguments));
}
return self::registry($registryKey);
}

在您的情况下,您总是想要一个全新的产品对象/模型,因为每个产品都是独一无二的...

关于php - Magento getSingleton() 与 getModel() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18756753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com