getSingleton 最终也是返回一个Mage_Core_Model_Abstract子类对象,但其和getModel函数最大的区别是:Mage::getSingleton 永远只生成一个对象并将生成的对象通过Mage::registry函数注册到magento系统当中,再次执行getSingleton时获取到上一 次生成的对象。
我们通过以下的系统源代码可以清楚的看到其和getModel函数的区别。
/**
* 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);
}