Сериализация объектов в сессию и фатал еррор

zerkms

TDD infected
Команда форума
Сериализация объектов в сессию и фатал еррор

PHP:
<?php
	set_error_handler('my_error_handler');

	session_start();

	$obj = new myclass();

	$_SESSION['obj'] = $obj;

	$a->b();

	class myclass
	{
		private $a = 1;
		private $b = 2;
		
		public function __sleep()
		{
			return array('a'); // <------ смотрим ВНИМАТЕЛЬНО на эту строку и потом ВНИМАТЕЛЬНО ЖЕ смотрим в файл сессии
		}
	}

	function my_error_handler($code, $error, $file = NULL, $line = NULL)
	{
		throw new ErrorException($error, $code, 0, $file, $line);
	}
Господа, в результате получается совсем не то, что ожидалось. Комментарии?
 

Adelf

Administrator
Команда форума
Fatal error: Call to a member function b() on a non-object in T:\home\localhost\www\5.php on line 26

5.2.4

Что тут неожиданного?
 

zerkms

TDD infected
Команда форума
Adelf
Посмотри что в сессии лежит теперь
 

Adelf

Administrator
Команда форума
мм.. у меня обьект :)
b там равно два, но это обьясняется private $b = 2; :) он же обьект пытается создать..

Можно сделать типа:
PHP:
        public function __sleep()
        {
            $this->a = 4;
            $this->b = 3;
            return array('a');
        }
И это докажет нам, что b не сериализуется, а а - сериализуется.
 

zerkms

TDD infected
Команда форума
Adelf
смотри непосредственно в файл сессии. с фаталом и без фатала.
 
Сверху