protected function getProperty($key)
{
if (isset($this->cached[$key])) {
return $this->cached[$key];
}
$value = isset($this->properties[$key]) ? $this->properties[$key] : null;
$mutator = 'g' . $key;
if (is_callable([$this, $mutator])) {
$this->cached[$key] = $value = $this->{$mutator}($value);
}
return $value;
}