Magento:Mage :: registry('current_product')有效吗?

mus*_*sme 7 php magento

如果你知道它背后的过程,这可能是显而易见的.但是当你Mage::registry('current_product')在产品页面上使用时,你只是引用已经"加载"的东西,或者你每次运行那行代码时都加载它?

换句话说,哪个更有效?(下面的伪代码)

Mage::registry('current_product')->getName() over and over
Run Code Online (Sandbox Code Playgroud)

要么...

$temp = Mage::registry('current_product') then
$temp->getName() over and over
Run Code Online (Sandbox Code Playgroud)

Ala*_*orm 17

调用

Mage::registry('current_product')->getName()
Run Code Online (Sandbox Code Playgroud)

一遍又一遍,效率会略低于

$temp = Mage::registry('current_product') then
$temp->getName() over and over
Run Code Online (Sandbox Code Playgroud)

但是我并不是那么害怕.如果您正在设置编码样式,请选择第二个.如果你有一堆旧的代码与前者,不要担心它的性能.

调用时,产品本身不会从数据库重新加载Mage::registry('current_product')- 所有这个方法都返回一个存储在类的静态数组中的对象引用Mage.

我之所以说前者效率会稍微低一点的原因是,如果你看看它的来源 registry

#File: app/Mage.php
public static function registry($key)
{
    if (isset(self::$_registry[$key])) {
        return self::$_registry[$key];
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

你会看到Magento在返回值之前检查是否设置了键.理论上,这种检查是更多的工作,从registry一次抓取它然后重用变量.

但是,实际上,在这是一个真正的问题之前,你会遇到更大的瓶颈.