Какова продолжительность жизни помощника в Magento 1?


Как я понимаю, помощники - это синглеты в Magento. Мне было интересно, какова продолжительность жизни синглтона в Магенто. Создается ли только 1 экземпляр в течение срока службы приложения (от начала до конца процесса веб-сервера) или это по запросу? Или это что-то другое?

У меня есть помощник, который запоминает некоторые данные, и мне было интересно, как долго он будет их хранить. Я полагал, что это будет на всю жизнь помощника.

Author: Shilpam, 2015-06-02

2 answers

Большинство переменных в PHP сохраняются до тех пор, пока длится запрос страницы или выполнение. Таким образом, если вы создадите экземпляр вспомогательного объекта для определенного запроса страницы или выполнения сценария в командной строке, помощник сохранит кэшированную переменную $this->_variable только для этого запроса. Когда вы обновите страницу или снова запустите сценарий, он будет создан заново. Рассмотрим следующий фиктивный помощник.

class My_Extension_Helper_Data extends Mage_Core_Helper_Data
{
    protected $_temp = null;

    public function getTemp()
    {
        if (!isset($this->_temp)) {
            $this->_temp = rand(0,10);
        }

        return $this->_temp;
    }
}    

Вызовите $helper->getTemp() и посмотрите, какую переменную он возвращает. Вы увидите, что он меняется при каждом запуске или странице запрос.

 3
Author: musicliftsme, 2015-07-20 15:33:24

Как вы можете видеть ниже, помощник установлен в реестре:

/**
 * Retrieve helper object
 *
 * @param string $name the helper name
 * @return Mage_Core_Helper_Abstract
 */
public static function helper($name)
{
    $registryKey = '_helper/' . $name;
    if (!self::registry($registryKey)) {
        $helperClass = self::getConfig()->getHelperClassName($name);
        self::register($registryKey, new $helperClass);
    }
    return self::registry($registryKey);
}

, который в основном устанавливает статический var. Это, как говорится, и проще говоря, помощник будет создан и инициализирован только в течение всего срока службы приложения. Как только помощник будет вызван в новом процессе, ранее установленные данные будут потеряны.

Если вы хотите хранить данные для последующего повторного использования, вы можете использовать core/sessions, чтобы реализовать собственный класс сеансов.

 4
Author: Shaughn, 2015-06-02 22:03:45