Во-первых, прежде чем мы перейдем к Magento, важно понять, что PHP имеет принципиально другую модель процессов, чем Java.Синглтон PHP (независимо от участия Magento) представляет собой отдельный экземпляр класса на HTTP-запрос .Программа PHP не является постоянной в памяти так же, как программа Java, поэтому скорректируйте свои ожидания в отношении «синглтона» соответственно.
Далее, важно понимать, что Magento - это фреймворк, построенный на поверх PHP с использованием PHP, и во многих случаях первоначальные разработчики Magento хотели подтолкнуть к более Java-подобной архитектуре.,Итак, вы увидите вещи, которые выглядят знакомыми, знакомыми, но, вероятно, несколько отличаются от того, к чему вы привыкли, потому что они все еще должны соответствовать версии вселенной PHP.
Magento использует фабричный шаблон для создания экземпляров классов Helpers, Blocks и «Model».Строка
core/session
является псевдонимом класса.Этот псевдоним используется для поиска имени класса в конфигурации Magento.Короче говоря, эта строка преобразуется в выражения пути, которые выполняют поиск в файлах конфигурации Magento для получения имени класса на основе контекста (помощник, блок, модель), в котором он был вызван. Более подробную версию см. В моей автоматической загрузке класса Magento. article.
Понятие «Модель» немного нечетко в Magento.В некоторых случаях модели используются как доменные или сервисные модели.В других случаях они используются в качестве более традиционных моделей постоянства базы данных промежуточного программного обеспечения.После нескольких лет работы с системой, я думаю, что самый безопасный способ думать о Моделях - это попытка Magento покончить с непосредственным созданием класса.
Есть два способа создания экземпляра класса модели.
Mage::getModel('groupname/classname');
Mage::getSingleton('groupname/classname');
Первая форма даст вам новый экземпляр класса.Во второй форме вы получите экземпляр класса singleton.Эта конкретная абстракция Magento позволяет вам создавать синглтон из любого класса модели Magento, но только если вы придерживаетесь методов создания экземпляров Magento.То есть, если вы позвоните
Mage::getSingleton('groupname/classname');
, то последующие вызовы
Mage::getSingleton('groupname/classname');
вернут этот экземпляр-одиночка.(Это реализовано с помощью шаблона реестра).Однако ничто не мешает вам непосредственно создавать новый экземпляр класса с помощью
$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.Эти системы позволяют модулям безопасно устанавливать и манипулировать своими собственными данными сеанса без случайного наступления на пальцы другого модуля и предоставлять методы логического класса для манипулирования этими данными.
Надеемся, что это ответит на вопросы, которые вы задавали, а также нате, которые вы не сделали.