Я разрабатываю сайт с помощью CodeIgniter и создал пользователя и сеанс:
$user->first_name = 'Gerep'; $user->gender = 'M'; $user->age = '26'; $this->session->set_userdata('user', $user);
Но когда я пытаюсь получить доступ к объекту сеанса:
echo $this->session->userdata('user')->first_name;
Он возвращает мне ошибку: Object of class __PHP_Incomplete_Class could not be converted to string
Я всегда так делал и никогда не сталкивался с этой проблемой.
Благодаря!
Определение класса не было загружено, когда PHP попытался десериализовать объект в сеансе.
Вы можете решить свою проблему, используя автозагрузку .
Решение работает, но вам нужно убедиться, что определения объектов класса читаются до сеанса:
$autoload['libraries'] = array('**our class**','session','form_validation');
Посмотрите, есть ли у вас __autoload ($ class) и измените его, чтобы использовать способ spl_autoload_register (). Пример:
function __autoload($class) { if (file_exists(APPPATH . 'core/' . $class .EXT)) { require_once APPPATH . 'core/' . $class . EXT; } else { if (file_exists(APPPATH . 'libraries/' . $class . EXT)) { require_once APPPATH . 'libraries/' . $class . EXT; } } }
будет изменено на:
function CIautoload($class) { if (file_exists(APPPATH . 'core/' . $class .EXT)) { require_once APPPATH . 'core/' . $class . EXT; } else { if (file_exists(APPPATH . 'libraries/' . $class . EXT)) { require_once APPPATH . 'libraries/' . $class . EXT; } } } spl_autoload_register('CIautoload');
Таким образом, вы сможете использовать всю мощность PHP 5.3 (и у вас не будет проблем с автозагрузками композитора и CI,; D)
Если через некоторое время с помощью PHP 5.2 вы начнете использовать PHP> 5.3 и весь способ кодирования OO, вы начнете использовать spl_autoload_register
. С CI в проектах с PHP 5.2, поскольку вы не могли использовать spl_autoload_register
люди использовали известный хак для автозапуска классов с помощью function __autoload($class)
которую они обычно пишут в файле config.php. Проблема в том, что когда вы смешиваете оба, функция spl_autoload_register
переопределяет ваш класс __autoload
и возникает ошибка, которую задает вопрос.
Это происходит со мной в последнее время, и чтение решений дает мне представление. Первая проблема заключается в том, что session_start
был раньше, чем autload
, это ошибка. Вы должны объявить свою autload
или включить это, тогда вы можете выполнить session_start
.