использования фунции __sleep() и __wakeup() в классах php5

texrdcom

Новичок
Вот так можно решить с статическими атрибутами привожу пример для того что бы товарищам писавшим верху было понятно то что я понимаю :)
PHP:
<?php
class test
{
private static  $time=0;
function __construct()
{
$this->time();    
} 

function time()
{    
if(!self::$time)
{
self::$time=time();    
}
}

function get_time()
{
echo self::$time."\r\n";    
}   
}
$g=new test();
$g->get_time();
sleep(2);
$a=new test();
$a->get_time();
?>
/**
* выводит:
*1135360449
*1135360449
*/
Но судя по ману я понимаю что такоеже можно решить с помощью функции __sleep() и __wakeup() - у меня не получаеться! вот и вопрос такое можно сделать с више приведенными функциями или нет ?
 

texrdcom

Новичок
PHP:
<?php
class test
{
private $time;
function __construct()
{
$this->time();    
} 

private function time()
{    

$this->time=time();    

}
/*   public function __sleep()
   {
       return array($this->time);
   }
*/
    public function __wakeup()
   {
       $this->time();
   } 
   
function get_time()
{
echo $this->time."\r\n";    
}  
  
}

$g=new test();
$g->get_time();
sleep(2);
$a=new test();
$a->get_time();
?>
А это пример не рабочий, выводит разное время, я понимаю что не понимаю примения функций (__sleep() и __wakeup() -) - вернея их применения - вот и прошу обяснить того кто знает :)

-~{}~ 23.12.05 21:09:

В примере показан клас соединения с базой, и во время его использования создания разных объектов соединения одно !
то есть функция connect() делает одно соединения, если не поменять параметры соединения.
 

itprog

Cruftsman
В мануале написано.

PHP:
class test
{
private $time;
function __construct()
{
$this->time();
} 

private function time()
{    
$this->time=time();
}
/*
   public function __sleep()
   {
   }
*/
    public function __wakeup()
   {
       $this->time *= 100;
 
   } 

function get_time()
{
echo $this->time."\r\n";    
}  
}
$a = serialize(new test);
$b = unserialize($a);
$b->get_time();
sleep(1);
$c = unserialize($a);
$c->get_time();
 
Сверху