В методах класса иногда приходиться работать с сессиями. Вопрос:
лучше в методе класса вызывать session_start() или вынести перед описанием класса?
Т.е.
class somaClass {
public function() {
session_start();
...
}
}
или
session_start();
class somaClass {
public function() {
...
}
}
Также это относится и при использовании каких-то модулей. Нужно их к методе модули подключать, чтобы использовать классы модулей в методе. Или перед классом вынести? ?
Большой разницы нету, главное что бы сессия начиналась до того как будет отправлен хоть один знак клиенту. Все зависит от ситуации, если Вы хотите использовать только в одном методе, то лучше в нем прописать старт, если во всем сайте, то лучше с самого начала, ну а если во всем классе, то можно и в конструкторе:
class somaClass {
public function __construct() {
session_start();
}
}
Главное знайте, что сессию можно начать только один раз, иначе будет ошибка.
session_start()
Работать будет в любом случае только до начала вывода каких то данных (или пока сервер не начнет отдавать какие то данные), так что с точки зрения PHP правильного варианта нету.
Но вот с точки зрения архитектуры приложения плохой вариант выносить на каждую страницу начало сессии, потому что должен быть единый механизм выполнения страницы.
Например пользователь зашел на страницу вызывается класс подключения к базе данных, затем класс работы с сессиями и тд.
В разных CMS и фреймворках шаги разные и могут меняться но всегда есть некий модуль (класс) который работает с сессиями и потом просто на страницах вызывается.
Так что лучше делать все это в самом классе.
В современном PHP
есть рекомендуемые стандарты написания и использования кода для разработчиков, PSR
- PHP Standard Recommendation
. И на ваш ответ PSR-1
отвечает явным и недвусмысленном образом вот в этой части:
Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both.
Файлы должны либо объявлять новые классы, функции, константы и т.д. либо выполнять какие-то действия. Но нельзя делать и то и другое. Вызов session_start
с одновременным объявлением класса открыто противоречит этому базовому правилу. То есть фактически так написать можно и это будет работать, но это столь же плохая практика, как глобальные переменные и другие признаки плохого кода.
Должно быть именно:
class somaClass {
public function() {
session_start();
...
}
}
Возможно вы захотите перед session_start
проверить, не запущена ли уже сессия была - для этого можно воспользоваться функцией session_status
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не могу сообразить как сделать данноеВ процессе выполнения php скрипта мне нужно запустить еще один php файл
Считаю вопрос очень важным так как нигде ранее не встречал, поиск всех значений по одной большой таблице в которую они все записаны
С помощью кода ниже сохраняю картинки на хостинге и записываю их имена в БД
Хочу создать процесс, который посылал данные из файла, при изменении этих файловНа ум приходит только, в цикле на каждом тике проверять время...