newfield = newval. a $object->newfield in a get context * will also fail. Each model has to implement the static method fieldInfo(). * The returned value should be a array with the property names of the class as keys * and the value type description as value. * * The type description has to contain the type at least, but can contain addition options, separated by commas. * allowed types are: * * BASE * numeric: serial(digits), int(digits), float, double, decimal(p,s) * char: char(chars), text, longtext * binary: binary(kbytes), blob * logic: boolean * date/time: date, time, datetime, timestamp * other: enum(comma-separated values), set(comma-separated values) * * EXTENDED * numeric: objid, money, option * char: email, url, username * binary: image(kbytes) * logic: * date/time: * other: objref * * Adding an [] after the type defines a list of values. * * Additional options: * null: value can be null * primary: part of the primary key * _(NAME): property is part of key NAME * ro: property is marked as read only * * @package MCMS * @subpackage Model * @author Stefan Daurer * @since 1.0.0.0 */ abstract class Model extends \Mammut\StrictObject implements iModel { private $initalized = false; // universal getter method for all properties which start with [a-z] public function __call($name, $arguments) { if(preg_match('/get([A-Z][a-zA-Z0-9_]*)/', $name, $match)) { $pname = strtolower(substr($match[1], 0, 1)) . substr($match[1], 1); if(isset($this->$pname)) return $this->$pname; else throw new InvalidArgumentException("no such method '{$name}' in " . __CLASS__); } else throw new InvalidArgumentException("no such method '{$name}' in " . __CLASS__); } /** * this method should be called to mark this object as initialized */ public function initalize() { $this->initalized = true; } public function isInitalized() { return (boolean) $this->initalized; } public static function fieldInfo() { return array(); } public static function fieldDBMapping() { $result = array(); // should now work, as we support only php >= 5.3 foreach(static::fieldInfo() as $field=>$info) $result[$field] = $field; // simple 1:1 mapping by default return $result; } }