Какова продолжительность жизни помощника в Magento 1?
Как я понимаю, помощники - это синглеты в Magento. Мне было интересно, какова продолжительность жизни синглтона в Магенто. Создается ли только 1 экземпляр в течение срока службы приложения (от начала до конца процесса веб-сервера) или это по запросу? Или это что-то другое?
У меня есть помощник, который запоминает некоторые данные, и мне было интересно, как долго он будет их хранить. Я полагал, что это будет на всю жизнь помощника.
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()
и посмотрите, какую переменную он возвращает. Вы увидите, что он меняется при каждом запуске или странице запрос.
Как вы можете видеть ниже, помощник установлен в реестре:
/**
* 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, чтобы реализовать собственный класс сеансов.