For example, all classes which represent a piece of the data model have the same constructor:
/**
* Constructs a User from a (parsed) JSON hash
*
* @param mixed $o Either an array (JSON) or an XMLReader.
*
* @throws \Exception
*/
public function __construct($o = null)
{
if (is_array($o)) {
$this->initFromArray($o);
}
else if ($o instanceof \XMLReader) {
$success = true;
while ($success && $o->nodeType != \XMLReader::ELEMENT) {
$success = $o->read();
}
if ($o->nodeType != \XMLReader::ELEMENT) {
throw new \Exception("Unable to read XML: no start element found.");
}
$this->initFromReader($o);
}
}
For example, all classes which represent a piece of the data model have the same constructor: