Вопрос

Можно ли перезаписать суперглобальный кодовый кодовый код специализированным объектом сеанса?

родовое слово
Это было полезно?

Решение

Хотя это может сработать, я не думаю, что это разумное поведение.На мой взгляд, принцип наименьшего удивления применим как к программированию, так и к дизайну пользовательского интерфейса.Если вы перезапишете поведение по умолчанию для $_SESSION в своем скрипте, это чертовски запутает некоторых будущих программистов, которым придется иметь дело с вашим кодом.

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

На мой взгляд, лучше было бы написать класс со статическими методами для получения и установки ваших данных:

родовое слово

Затем вы можете получить доступ к нему с помощью Session::get('someKey') или Session::get('someKey', 'default') и Session::set('someKey', 'someValue').

Поскольку классы по своей сути глобальны, вы можете получить к ним доступ из любого места вашего кода.Это менее удивительно и в дальнейшем приведет к меньшей путанице.

Если по какой-то причине вы захотели использовать методы объекта, возможно, лучше всего реализовать шаблон Singleton.

Другие советы

Мне кажется, это немного рискованно.Вы уже знакомы с методом session_set_save_handler ?Он позволяет вам назначить собственный обработчик для использования вместо попытки перезаписать $ _SESSION.

Если вы сами занимаетесь обработкой и хранением сеансов, то можете делать все, что вам заблагорассудится.Суперглобальный $ _SESSION можно использовать в этом отношении, как и любую другую переменную.

Только обработчик сеанса PHP по умолчанию обрабатывает его специально.Он ожидает там нормального массива (и его также нельзя индексировать численно).Если вы захотите использовать это снова, вам потребуется отменить причудливую упаковку ArrayObject с помощью вызова выключения:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top