1: <?php
  2: 
  3: /**
  4:  * Picon Framework
  5:  * http://code.google.com/p/picon-framework/
  6:  *
  7:  * Copyright (C) 2011-2012 Martin Cassidy <martin.cassidy@webquub.com>
  8: 
  9:  * Picon Framework is free software: you can redistribute it and/or modify
 10:  * it under the terms of the GNU General Public License as published by
 11:  * the Free Software Foundation, either version 3 of the License, or
 12:  * (at your option) any later version.
 13: 
 14:  * Picon Framework is distributed in the hope that it will be useful,
 15:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 17:  *  General Public License for more details.
 18: 
 19:  * You should have received a copy of the GNU General Public License
 20:  * along with Picon Framework.  If not, see <http://www.gnu.org/licenses/>.
 21:  * */
 22: 
 23: namespace picon;
 24: /**
 25:  * Super class for any and all domains
 26:  *
 27:  * @author Martin Cassidy
 28:  * @package domain
 29:  */
 30: class ComonDomainBase
 31: {
 32:     /**
 33:      * Get the requested value
 34:      * @param String $name The name of the property to get
 35:      * @return Object The value of the property 
 36:      */
 37:     public function __get($name)
 38:     {
 39:         $obj = new \ReflectionClass($this);
 40:         $property = $this->resolveProperty($obj, $name);
 41:         if($property==null)
 42:         {
 43:             throw new \InvalidArgumentException ("Unknown property ".$name);
 44:         }
 45:         if(!$property->isPublic())
 46:         {
 47:             $property->setAccessible(true);
 48:         }
 49:         return $property->getValue($this);
 50:     }
 51:     
 52:     /**
 53:      * Sets the value of a property
 54:      * @param String $name The name of the property to set
 55:      * @param Object $value The new value
 56:      */
 57:     public function __set($name, $value) 
 58:     {
 59:         $obj = new \ReflectionClass($this);
 60:         $property = $this->resolveProperty($obj, $name);
 61:         if($property==null)
 62:         {
 63:             throw new \InvalidArgumentException ("Unknown property ".$name);
 64:         }
 65:         if(!$property->isPublic())
 66:         {
 67:             $property->setAccessible(true);
 68:         }
 69:         $property->setValue($this, $value);
 70:     }
 71:     
 72:     /**
 73:      * A generic to string
 74:      * @todo Add support for arrays
 75:      * @return string A string representation of the object
 76:      */
 77:     public function __toString()
 78:     {
 79:         $reflection = new \ReflectionClass($this);
 80:         $properties   = $reflection->getProperties();
 81:         $out = "";
 82:         foreach ($properties as $property) 
 83:         {
 84:             if(!$property->isPublic())
 85:             {
 86:                 $property->setAccessible(true);
 87:             }
 88:             $out .= $property->getName().": ".$property->getValue($this). "\n";
 89:         }
 90:         return $out;
 91: 
 92:     }
 93:     
 94:     private function resolveProperty(\ReflectionClass $obj, $name)
 95:     {
 96:         if($obj->hasProperty($name))
 97:         {
 98:             return $obj->getProperty($name);
 99:         }
100:         else if($obj->getParentClass()!=null)
101:         {
102:             return $this->resolveProperty($obj->getParentClass(), $name);
103:         }
104:         return null;
105:     }
106: }
107: 
108: ?>
109: