За последние 24 часа нас посетили 66685 программистов и 1638 роботов. Сейчас ищут 929 программистов ...

Объекты и сессии (__PHP_Incomplete_Class)

Тема в разделе "Прочие вопросы по PHP", создана пользователем shreck, 5 фев 2008.

  1. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    debug() - выводит дамп объекта
    inc_*() - подключает необходимые библиотеки и классы

    PHP:
    1.  
    2. <?php
    3.   require_once '../../../../config.php';
    4.   inc_lib('db');        
    5.   inc_lib('ajax');
    6.   inc_class('UserMapper');  
    7.   debug($_SESSION);
    8. ?>
    9.  
    В сессии на момент вызова скрипта уже храниться объект.

    Дамп выглядит следующим образом

    PHP:
    1.  
    2. [user] => __PHP_Incomplete_Class Object
    3.         (
    4.             [__PHP_Incomplete_Class_Name] => User
    5.             [id] => 2
    6.             [fio] => Иванов Иван
    7.             [group] => __PHP_Incomplete_Class Object
    8.             // и.т.д
    9.  
    Поискал в гугле, говорят что нужно объявлять классы до session_start(). Ну так я и сделал. В чем может быть проблема?
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. //include 'Test.php';
    3. ini_set('unserialize_callback_func','loadClass');
    4.  
    5. // $_SESSION['test'] = new Test();
    6. print_r($_SESSION);
    7.  
    8. function loadClass($name) {
    9.     include $name . '.php';
    10. }
    Хотя у меня и так работает:
    PHP:
    1. <?php
    2. include 'Test.php';
    3.  
    4. print_r($_SESSION);
     
  3. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Sergey89, не выходит, все тоже самое.
    Кстати маленькое уточнение. Скрипт данный выше, является backend-ом для ajax (если это как-то поможет)
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3.   require_once '../../../../config.php';
    4.   inc_lib('db');        
    5.   inc_lib('ajax');
    6.   inc_class('UserMapper');  
    7.   var_dump(class_exists('UserMapper')); // или какой там класс?
    8. ?>
    9.  
    что говорит?
     
  5. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Sergey89
    Я сомневаюсь, что проблема в этом, потому-что классы подключаются нормально.
    PHP:
    1.  
    2. var_dump(class_exists('UserMapper'));
    3.  
    говорит, то что и должен
    PHP:
    1.  
    2. bool(true)
    3.  
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Может Zend Optimizer стоит? Или ещё что-то?
     
  7. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Sergey89
    Нет, ничего такого не стоит.
    Я думаю, что нужно переводить объект в массив и работать с ним. Хотя странно, в остальных случаях работает.
     
  8. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    А запусти несколько раз такой код:
    PHP:
    1. <?php
    2. class Test {
    3.     public $y = 1;
    4.     public $x = 1;
    5. }
    6.  
    7.  
    8. if (!isset($_SESSION['test'])) {
    9.     $_SESSION['test'] = new Test;
    10. }
    11.  
    12. print_r($_SESSION);
    Если не будет работать, то явно баг какой-то. Обнови версию PHP попробуй.
     
  9. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Так и сделаю...как поменяю, отпишусь.
     
  10. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Обновил версию php до 5.2.5, стояла 5.2.1, все заработало. Хотя странно.
    Sergey89, спасибо.