class DataObjectDescriptor extends Object
{
private $args;
function __construct(array $args)
{
$this->args = $args;
}
function refresh(Object $object)
{
$publicproperties = $this->getPublicProperties($object);
foreach ($this->args as $key => $value) if (isset($publicproperties[$key])) $object->$key = $value;
}
private function getPublicProperties(Object $object)
{
$objectname = get_class($object);
$class = new ReflectionClass($objectname);
$properties = array();
foreach($class->getProperties() as $p) {
$prop = new ReflectionProperty($objectname,$p->name);
if ($prop->isPublic()) $properties[$p->name] = $p->name;
}
return $properties;
}
}
class DataObjectMaster extends Object
{
private $descriptor;
public $objectid = null; // system id of the object in this installation
....
function __construct(DataObjectDescriptor $descriptor)
{
$this->descriptor = $descriptor;
$this->load();
....
}
public function load()
{
$this->descriptor->refresh($this);
}