2013-05-22 8 views
1

Вот код, который сериализует данные, а затем неэтериализует их.PHP - Как несериализировать данные с помощью (UNSERIALIZE)

class magicmethod { 
protected $name = array('Arfan','Azeem','Haider'); 
protected $fruit = array('Apple','Bannana'); 
protected $animal = 'Cat'; 

public function __sleep(){ 
    return array('name','animal'); 
} 

public function __wakeup(){ 
    echo 'Going to Unserialized'; 
} 
    } 

$obj = new magicmethod; 

$ser = serialize($obj); 

var_dump($ser); 

var_dump(unserialize($ser)); 

Я просто сериализовать $name и $animal сохранили его в имени переменной $ser. После этого я unserialized это var $ser видеть, что он unserialize весь класс magicmethod он также может вернуть fruit array Как это может сделать, что я не могу сериализовать весь класс.
Я хочу получить только те результаты, которые я сериализовал.

ответ

0

Вы видите это поведение, потому что они настроены как значения по умолчанию для свойств ... если вы посмотрите на этот пример, он будет вести себя так, как вы ожидаете.

class magicmethod { 
    protected $name; 
    protected $fruit; 
    protected $animal; 

    public function setData(){ 
     $this->name = array('Arfan','Azeem','Haider'); 
     $this->fruit = array('Apple','Bannana'); 
     $this->animal = 'Cat'; 
    } 
    public function __sleep(){ 
     return array('name','animal'); 
    } 

    public function __wakeup(){ 
     echo 'Going to Unserialized'; 
    } 
} 

$obj = new magicmethod(); 
$obj->setData(); 
$ser = serialize($obj); 
print_r($ser); 

print_r(unserialize($ser)); 

Что происходит, что когда десериализация происходит это создает новый объект из определения класса (но обходит конструктор), а затем накладывается сериализованные данные на свойства классов. Если вы внимательно посмотрите на данные сериализованных значений, вы заметите, что определение плодов отсутствует.

0

Когда вы вызываете unserialize(), вы создаете новый объект magicmethod со значением по умолчанию $fruit. Фруктовый массив не является частью ваших сериализованных данных, но исходит из определения вашего класса.

Смежные вопросы