PHP Classes
Icontem

File: class/xmlserialize.cls.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet 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  
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)
 

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;
    }

}
?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products