#php #arrays #class #session #constructor
#php #массивы #класс #сеанс #конструктор
Вопрос:
Проблема, с которой я сталкиваюсь, заключается в том, что когда я получаю класс, сохраненный в сеансе, результатом является неполный класс.
class Users {
function __construct(){
FunctionsHelper::includeFiles(
array(
ADMINISTRATOR_MODEL_DIRECTORY . 'model.php',
ADMINISTRATOR_MODEL_DIRECTORY . 'user.php'
)
);
}
public function setLoggedUser($user){
if (session_id() == "")
session_start();
$_SESSION['ATT_user'] = $user;
}
public function getLoggedUser(){
if (session_id() == "")
session_start();
if (!isset($_SESSION['ATT_user'])) {
return new User();
}
$loggedUser = $_SESSION['ATT_user'];
$UserId = $logedUser->getUserId();
if (empty($UserId)) {
return new User();
}
return $loggedUser;
}
}
Проблема заключается в том, когда я вызываю метод getLoggedUser()
. $_SESSION['ATT_user']
хранит User
объект, который должен быть восстановлен.
Проблема в том, что в __construct
функцию я включаю файл, который загружает User
класс, поэтому я не понимаю, почему я получаю ошибку. FunctionsHelper::includeFiles
Функция включает файлы, но также, если я вызываю функцию include в качестве первой строки в getLoggedUser
функции, в $_SESSION
массиве все равно будет неполный объект.
Другое дело, если я делаю print_r
внутри setLoggedUser()
. $_SESSION
Содержит завершенный объект!!
Может кто-нибудь объяснить мне, помогите мне, пожалуйста ?!
Я использую IIS 7 вместо Apache.
Комментарии:
1. Используйте автозагрузку класса с помощью
composer
. getcomposer.org Вам не придется вручную включать файлы и избегать подобных проблем.2. Нет ли другого варианта, который не требует включения другого файла?
3. Вы могли бы реализовать свою собственную систему автозагрузки, см.: php.net//manual/en/function.spl-autoload-register.php