Advertisement
fruffl

Serialize Nested Pattern

Mar 4th, 2012
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.13 KB | None | 0 0
  1.  
  2.     ABSTRACT CLASS BaseClass
  3.     {
  4.         public function __sleep()
  5.         {
  6.             print __METHOD__.' called'."\n";
  7.             $defaults   = get_class_vars(get_class($this));
  8.             $present    = get_object_vars($this);
  9.             $result     = [];
  10.            
  11.             foreach($present as $key => $value)
  12.                 if(!is_resource($value)
  13.                 && (is_object($value) || is_array($value) || $defaults[$key] !== $value))
  14.                     $result[] = $key;
  15.            
  16.             print print_r($result)."\n\n";
  17.            
  18.             return $result;
  19.         }
  20.     }
  21.    
  22.    
  23.     Class NonSerializeClass Extends BaseClass
  24.     {
  25.         private $___NonSerializeClass   = 'NaN';
  26.         public  $pubNonSerializeClass   = 'NaN';
  27.        
  28.         public function __construct(array $array = [])
  29.         {
  30.             $this->pubNonSerializeClass = 'my NonSerializeClass Public';
  31.             $this->___NonSerializeClass = 'my NonSerializeClass Private';
  32.         }
  33.     }
  34.    
  35.     Class SerializeClass Extends BaseClass implements \Serializable
  36.     {
  37.        
  38.         private static $__serializable  = ['___SerializeClass'];
  39.         private $___SerializeClass  = 'NaN';
  40.         public  $pubSerializeClass  = 'NaN';
  41.        
  42.         public function serialize()
  43.         {
  44.             $public = parent::__sleep();
  45.            
  46.             foreach($public as $property)
  47.                 $result[$property] = $this->$property;
  48.            
  49.             foreach(self::$__serializable as $property)
  50.                 $result[$property] = $this->$property;
  51.                
  52.             return serialize($result);
  53.         }
  54.        
  55.         public function unserialize($serialized)
  56.         {
  57.             $unserialized = unserialize($serialized);
  58.             foreach($unserialized as $field => $value)
  59.                 $this->$field = $unserialized[$field];
  60.                
  61.             return $unserialized;
  62.         }
  63.        
  64.         public function __construct(array $array = [])
  65.         {
  66.             $this->pubSerializeClass = 'my SerializeClass Public';
  67.             $this->___SerializeClass = 'my SerializeClass Private';
  68.         }
  69.     }
  70.    
  71.     Class SerializeChildClass Extends SerializeClass
  72.     {
  73.         private static $__serializable  = ['___SerializeChildClass'];
  74.         private $___SerializeChildClass = 'NaN';
  75.         public  $pubSerializeChildClass = 'NaN';
  76.        
  77.         public function __construct(array $array = [])
  78.         {
  79.             $this->pubSerializeChildClass   = 'my childClass Public';
  80.             $this->___SerializeChildClass   = 'my childClass Private';
  81.             parent::__construct($array);
  82.         }
  83.        
  84.         public function serialize()
  85.         {
  86.             $result['parent'] = parent::serialize();
  87.             foreach(self::$__serializable as $property)
  88.                 $result[$property] = $this->$property;
  89.                
  90.             return serialize($result);
  91.         }
  92.        
  93.         public function unserialize($serialized)
  94.         {
  95.             $unserialized = unserialize($serialized);
  96.             parent::unserialize($unserialized['parent']);
  97.             unset($unserialized['parent']);
  98.            
  99.             foreach(self::$__serializable as $field)
  100.                 $this->$field = $unserialized[$field];
  101.                
  102.             return $this;
  103.         }
  104.     }
  105.    
  106.     Class SerializeChildChildClass Extends SerializeChildClass
  107.     {
  108.         private static $__serializable  = ['___SerializeChildChildClass'];
  109.         private $___SerializeChildChildClass    = 'NaN';
  110.         public  $pubSerializeChildChildClass    = 'NaN';
  111.        
  112.         public function __construct(array $array = [])
  113.         {
  114.             $this->pubSerializeChildChildClass  = 'my childChildClass Public';
  115.             $this->___SerializeChildChildClass  = 'my childChildClass Private';
  116.             parent::__construct($array);
  117.         }
  118.        
  119.         public function serialize()
  120.         {
  121.             $result['parent'] = parent::serialize();
  122.             foreach(self::$__serializable as $property)
  123.                 $result[$property] = $this->$property;
  124.                
  125.             return serialize($result);
  126.         }
  127.        
  128.         public function unserialize($serialized)
  129.         {
  130.             $unserialized = unserialize($serialized);
  131.             parent::unserialize($unserialized['parent']);
  132.             unset($unserialized['parent']);
  133.            
  134.             foreach(self::$__serializable as $field)
  135.                 $this->$field = $unserialized[$field];
  136.                
  137.             return $this;
  138.         }
  139.     }
  140.    
  141. $a = new NonSerializeClass(["The" => "quick", 7 => "fox", "jumps" => "over", "the" => "lazy", "dog" => '.']);
  142. $b = new SerializeClass(["The" => "quick", 7 => "fox", "jumps" => "over", "the" => "lazy", "dog" => '.']);
  143. $c = new SerializeChildChildClass(["The" => "quick", 7 => "fox", "jumps" => "over", "the" => "lazy", "dog" => '.']);
  144.  
  145. //var_dump($a, $b);
  146.  
  147. $_a = serialize($a);
  148. //$_b = serialize($b);
  149. $_c = serialize($c);
  150.  
  151. $__a = unserialize($_a);
  152. //$__b = unserialize($_b);
  153. $__c = unserialize($_c);
  154. var_dump($__a, $__c);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement