Login   Register  
PHP Classes
elePHPant
Icontem

File: class/xmlserialize.cls.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Johan Barbier  >  RPG Ajax Creator  >  class/xmlserialize.cls.php  >  Download  
File: class/xmlserialize.cls.php
Role: Class source
Content type: text/plain
Description: Objects to XML Serializer/Unserializer class
Class: RPG Ajax Creator
Create Web based role play games (RPG)
Author: By
Last change: bug fixing
Date: 8 years ago
Size: 5,137 bytes
 

Contents

Class file image Download
<?php
/**
* CLASS xmlSerializer
* object to xml serialization and unserialization
* @auteur : johan <barbier_johan@hotmail.com>
* @version : 1
* @date : 2006/03/22
*
* free to use, modify, please just tell me if you make any changes :-)
*/
class xmlserialize {

    
/**
    * private object oObj
    * the object we work on
    */
    
private $oObj null;
    
/**
    * private array of object oPropObj
    * objects needed by the main object, because some of its properties are objects
    */
    
private $oPropObj = array ();
    
/**
    * private array aProps
    * the PUBLIC properties of the object
    */
    
private $aProps = array ();
    
/**
    * private string xml
    * the xml serailization of the object
    */
    
private $xml '';
    
/**
    * public string node
    * a fragment of the xml string
    */
    
public $node '';

    
/**
    * public function __construct
    * constructor
    * @Param (object) $obj : the object we want to serialize/unserialize
    * @Param (array) $oPropObj : array of objects needed by the main object
    */
    
public function __construct ($obj, array $oPropObj = array ()) {
        if (!
is_object ($obj)) {
            return 
false;
        } else {
            
$this -> oObj $obj;
        }
        if (!empty (
$oPropObj)) {
            foreach (
$oPropObj as $clef => $oVal) {
                if (
is_object ($oVal)) {
                  
$this -> oPropObj[$clef]['object'] = $oVal;
                  
$this -> oPropObj[$clef]['class'] = get_class ($oVal);
                }
            }
        }
    }

    
/**
    * public function getProps ()
    * method used to get the public properties of the object
    */
    
public function getProps () {
        
$this -> aProps get_object_vars ($this -> oObj);
    }

    
/**
    * private function recVarsToXml
    * method used to serialize the object, recursive
    * @Params (DomDocument) & docXml : the DomDocument object
    * @Params (DomElement) & xml : the current DomElement object
    * @Params (array) & aProps : the array of properties we work on recursively
    */
    
private function recVarsToXml (& $docXml, & $xml, & $aProps) {
        foreach (
$aProps as $clef => $val) {
            if (empty (
$clef) || is_numeric ($clef)) {
                
$clef '_'.$clef;
            }
            
$domClef $docXml -> createElement ((string)$clef);
            
$domClef $xml -> appendChild ($domClef);
            if (
is_scalar ($val)) {
                
$valClef $docXml -> createTextNode ((string)$val);
                
$valClef $domClef -> appendChild ($valClef);
            } else {
                if (
is_array ($val)) {
                    
$this -> recVarsToXml ($docXml$domClef$val);
                }
                if (
is_object ($val)) {
                    
$oXmlSerialize = new self ($val);
                    
$oXmlSerialize -> getProps ();
                    
$oXmlSerialize -> varsToXml ();
                    
$objClef $docXml -> importNode ($oXmlSerialize -> nodetrue);
                    
$objClef $domClef -> appendChild ($objClef);
                }
            }
        }
    }

    
/**
    * public function varsToXml
    * method used to serialize the object
    * @Return (string) $xml : the xml string of the serialized object
    */
    
public function varsToXml () {
        
$docXml = new DOMDocument ('1.0''iso-8859-1');
        
$xml $docXml -> createElement ('object_'.get_class ($this -> oObj));
        
$xml $docXml -> appendChild ($xml);
        
$this -> recVarsToXml ($docXml$xml$this -> aProps);
        
$this -> node $xml;
        return 
$this -> xml $docXml -> saveXML ();
    }

    
/**
    * private function recXmlToVars
    * method used to unserialize the object, recursive
    * @Param (array) aProps : the array we work on recursively
    */
    
private function recXmlToVars ($aProps) {
        foreach (
$aProps as $clef => $val) {
            
$cpt count ($val);
            if (
$cpt 0) {
                foreach (
$val as $k => $v) {
                    
$cpt2 count ($v);
                    if (
$cpt2 0) {
                          if (
substr ($k07) === 'object_') {
                            foreach (
$this -> oPropObj as $kObj => $vObj) {
                                if (
$this -> oPropObj[$kObj]['class'] === substr ($k7)) {
                                    
$oXmlSerializer = new self ($this -> oPropObj[$kObj]['object']);
                                    
$oXmlSerializer -> getProps ();
                                    
$sXml $oXmlSerializer -> varsToXml ();
                                    
$oXmlSerializer -> xmlToVars ($sXml);
                                    
$this -> oObj -> {$clef}[substr ($k7)] = $oXmlSerializer -> getObj ();
                                }
                            }
                        } else {
                            
$this -> recXmlToVars ($v);
                        }
                    } else {
                        if (
$k{0} === '_') {
                            
$k substr ($k1strlen($k) - 1);
                        }
                        
$this -> oObj -> {$clef}[$k] = current ($v);
                    }
                }
            } elseif (!empty (
$val)) {
                
$this -> oObj -> $clef current ($val);
            }
        }
    }

    
/**
    * public function xmlToVars
    * method used to unserialize the object
    * @Param (string) xml : optional xml string (an already serialized object)
    */
    
public function xmlToVars ($xml '') {
        if (empty (
$xml)) {
            
$xml simplexml_load_string ($this -> xml);
        } else {
            
$xml simplexml_load_string ($xml);
        }
        
$this -> recXmlToVars ($xml);
    }

    
/**
    * public function getObj
    * method used to get the unserialized object
    * @Return (object) oObj : the unserialized object
    */
    
public function getObj () {
        return 
$this -> oObj;
    }

}
?>