Ответ 1
Прежде всего, прежде чем мы перейдем к Magento, важно понять, что PHP имеет принципиально другую модель процесса, чем Java. Синглтон PHP (независимо от участия Magento) - это единственный экземпляр класса для HTTP-запроса. PHP-программа не является постоянной в памяти так же, как и Java-программа, поэтому соответствующим образом корректируйте свои ожидания "singleton".
Далее важно понять, что Magento - это построенная фреймворком сверху PHP, с использованием PHP, и во многих случаях оригинальные разработчики Magento хотели подтолкнуть вас к более похожей на Java архитектуре. Итак, вы увидите вещи, которые выглядят знакомыми, знакомы, но, вероятно, будут отличаться каким-то значительным образом от того, к чему вы привыкли, потому что им все равно нужно использовать PHP-версию юниверса.
Magento использует шаблон factory для создания экземпляров классов "Помощники", "Блоки" и "Модель". Строка
core/session
- псевдоним класса. Этот псевдоним используется для поиска имени класса в конфигурации Magento. Короче говоря, эта строка преобразуется в выражения пути, которые ищут файлы конфигурации Magento для получения имени класса, на основе контекста (хелпера, блока, модели), в котором он был вызван. Для более длинной версии см. Мой Magento Class Instantiation Autoload.
Понятие "Модель" немного нечеткое в Magento. В некоторых случаях модели используются как домен или модели обслуживания. В других случаях они используются как более традиционные модели устойчивости баз промежуточного программного обеспечения. После работы с системой в течение нескольких лет, я думаю, что самый безопасный способ подумать о моделях - это попытка Magento избавиться от непосредственного создания экземпляра класса.
Существует два способа создания экземпляра класса модели.
Mage::getModel('groupname/classname');
Mage::getSingleton('groupname/classname');
В первой форме вы получите новый экземпляр класса. Вторая форма даст вам экземпляр класса singleton. Эта абстракция Magento позволяет создать синглтон из любого класса модели Magento, но только если вы придерживаетесь методов создания Magento. То есть, если вы вызываете
Mage::getSingleton('groupname/classname');
затем последующие вызовы
Mage::getSingleton('groupname/classname');
вернет этот экземпляр singleton. (Это реализовано с помощью шаблона реестра). Тем не менее, нет ничего, что помешало бы вам непосредственно создавать экземпляр класса с помощью
$o = Mage::getModel('groupname/classname');
$o = new Mage_Groupname_Model_Classname();
Это приводит нас к занятиям. Модель запроса PHP, такая как HTTP, изначально была предназначена для безгражданства. Каждый запрос поступает в систему с информацией только от пользователя. По мере того, как язык (и Интернет) продвигался к платформе приложений, была введена система, которая позволяла сохранять информацию, чтобы заменить доморощенные системы, которые возникали. Эта система называлась сеансами. Сессии PHP работают, предоставляя супер глобальный массив $_SESSION для конечного пользователя-программиста, который позволяет хранить информацию на основе веб-пользователей. Сеансы выполняются путем установки уникального идентификатора в качестве файла cookie в конце пользователя, а затем использования этого файла cookie в качестве ключа поиска (также стандартной практики для веб-приложений).
В свою очередь, система Magento создает абстракцию поверх абзаца сеанса PHP. В Magento вы можете создать "модель сеанса", которая наследуется от базового класса сеанса, устанавливать на нем элементы данных и сохранять/загружать эти элементы данных так же, как и с моделью сохранения базы данных. Разница заключается в том, что информация хранится в сеансе, а не в хранилище базы данных. Когда вы видите
core/session
customer/session
это две разные модели сеансов, каждая из которых хранит разные данные. Один принадлежит модулю Mage_Core, другой принадлежит модели Mage_Customer. Эти системы позволяют модулям безопасно устанавливать и обрабатывать свои собственные данные сеанса, не случайно наступая на другие пальцы модуля и предоставляют методы логического класса для управления этими данными.
Надеюсь, это ответит на заданные вами вопросы, а также те, которые вы не сделали.