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: