public function getProperty($name) { if (Attributes::isClassAttribute(get_called_class(), $name)) { return $this->getAttribute($name); } elseif ($type = AccessibleProperties::getProperty(get_called_class(), $name)) { if (isset($type['propName'])) { return $this->{$type['propName']}; } elseif ($type[0]) { return $this->{$name}(); } } throw new Exception\InvalidArgumentException(sprintf("Trying to get unknown property %s::%s", get_called_class(), $name)); }
protected function getPropertyGetter($modelClass, $propName) { if (Attributes::isClassAttribute($modelClass, $propName)) { return function ($model) use($propName) { return $model->getAttribute($propName); }; } else { $property = AccessibleProperties::getProperty($modelClass, $propName); if ($property === true) { return function ($model) use($propName) { $model->{$propName}; }; } elseif ($property[0]) { return function ($model) use($propName) { $model->{$propName}(); }; } } throw new Exception\RuntimeException(sprintf("Unknown attribute or property %s::%s", $modelClass, $propName)); }