dba = $dba; $this->logger = $logger; $this->data = $data; } /** * Performance-improved model creation in a loop * * @param BaseModel $prototype * @param array $data * @return BaseModel */ public static function createFromPrototype(BaseModel $prototype, array $data) { $model = clone $prototype; $model->data = $data; return $model; } /** * Magic getter. This allows to retrieve model fields with the following syntax: * - $model->field (outside of class) * - $this->field (inside of class) * * @param $name * @return mixed * @throws HTTPException\InternalServerErrorException */ public function __get($name) { if (empty($this->data['id'])) { throw new HTTPException\InternalServerErrorException(static::class . ' record uninitialized'); } if (!array_key_exists($name, $this->data)) { throw new HTTPException\InternalServerErrorException('Field ' . $name . ' not found in ' . static::class); } return $this->data[$name]; } /** * @param string $name * @param mixed $value */ public function __set($name, $value) { $this->data[$name] = $value; } public function toArray() { return $this->data; } }