Advertisement
fruffl

iSerializable vs __sleep

Mar 4th, 2012
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.85 KB | None | 0 0
  1. <?PHP
  2.  
  3.     ABSTRACT CLASS BaseClass
  4.     {
  5.        
  6.         public function __sleep()
  7.         {
  8.             print __METHOD__.' called'."\n";
  9.             $defaults   = get_class_vars(get_class($this));
  10.             $present    = get_object_vars($this);
  11.             $result     = [];
  12.            
  13.             foreach($present as $key => $value)
  14.                 if(!is_resource($value)
  15.                 && (is_object($value) || is_array($value) || $defaults[$key] !== $value))
  16.                     $result[] = $key;
  17.            
  18.             print print_r($result)."\n\n";
  19.            
  20.             return $result;
  21.         }
  22.     }
  23.    
  24.    
  25.     Class NonSerializeClass Extends BaseClass
  26.     {
  27.         public  $_____baz       = 'foo';
  28.         private $__array        = [];
  29.        
  30.         public function __construct(array $array = array())
  31.         {
  32.             $this->_____baz = 'bar';
  33.             $this->__array = $array;
  34.         }
  35.     }
  36.    
  37.     Class SerializeClass Extends BaseClass implements \Serializable
  38.     {
  39.        
  40.         private static $__serializable  = ['__array', '__offsets', '__indexes', '__protMode'];
  41.         public  $_____baz       = 'foo';
  42.         private $__array        = [];
  43.         private $__offsets      = [];
  44.         private $__indexes      = [];
  45.         private $__protMode     = 0;
  46.         private $__itIndex      = 0;
  47.        
  48.         public function serialize()
  49.         {
  50.             $result = [];
  51.             foreach(self::$__serializable as $property)
  52.                 $result[$property] = $this->$property;
  53.                
  54.             return serialize($result);
  55.         }
  56.        
  57.         public function unserialize($serialized)
  58.         {
  59.             $unserialized = unserialize($serialized);
  60.             foreach(self::$__serializable as $field)
  61.                 $this->$field = $unserialized[$field];
  62.                
  63.             return $this;
  64.         }
  65.        
  66.         public function __construct(array $array = array())
  67.         {
  68.             $this->_____baz = 'bar';
  69.             $this->__array = $array;
  70.         }
  71.     }
  72.    
  73. $a = new NonSerializeClass(["The" => "quick", 7 => "fox", "jumps" => "over", "the" => "lazy", "dog" => '.']);
  74. $b = new SerializeClass(["The" => "quick", 7 => "fox", "jumps" => "over", "the" => "lazy", "dog" => '.']);
  75.  
  76. //var_dump($a, $b);
  77.  
  78. $_a = serialize($a);
  79. $_b = serialize($b);
  80.  
  81. $__a = unserialize($_a);
  82. $__b = unserialize($_b);
  83. var_dump($__a, $__b);
  84.  
  85.  
  86. ?>
  87. localhost\illiFW\dev\BaseClass::__sleep called
  88. Array
  89. (
  90.     [0] => _____baz
  91. )
  92. 1
  93.  
  94. object(localhost\illiFW\dev\NonSerializeClass)#5 (2) {
  95.   ["_____baz"]=>
  96.   string(3) "bar"
  97.   ["__array":"localhost\illiFW\dev\NonSerializeClass":private]=>
  98.   array(0) {
  99.   }
  100. }
  101. object(localhost\illiFW\dev\SerializeClass)#6 (6) {
  102.   ["_____baz"]=>
  103.   string(3) "foo"
  104.   ["__array":"localhost\illiFW\dev\SerializeClass":private]=>
  105.   array(5) {
  106.     ["The"]=>
  107.     string(5) "quick"
  108.     [7]=>
  109.     string(3) "fox"
  110.     ["jumps"]=>
  111.     string(4) "over"
  112.     ["the"]=>
  113.     string(4) "lazy"
  114.     ["dog"]=>
  115.     string(1) "."
  116.   }
  117.   ["__offsets":"localhost\illiFW\dev\SerializeClass":private]=>
  118.   array(0) {
  119.   }
  120.   ["__indexes":"localhost\illiFW\dev\SerializeClass":private]=>
  121.   array(0) {
  122.   }
  123.   ["__protMode":"localhost\illiFW\dev\SerializeClass":private]=>
  124.   int(0)
  125.   ["__itIndex":"localhost\illiFW\dev\SerializeClass":private]=>
  126.   int(0)
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement