private function define($definition)
{
foreach ($definition as $name => $value) {
$nameParts = explode(' ', $name);
$name = array_pop($nameParts);
$isStatic = in_array('static', $nameParts);
$isFunction = in_array('function', $nameParts);
$isProperty = in_array('var', $nameParts);
$isConstant = in_array('const', $nameParts);
if (!$isFunction && !$isProperty && !$isConstant) {
if (is_object($value) && is_callable($value)) {
$isFunction = true;
}
}
if ($isFunction) {
if ($isStatic) {
$this->addStaticMethod($name, $value);
} else {
$this->addMethod($name, $value);
}
} elseif ($isConstant) {
$this->addConstant($name, $value);
} else {
if ($isStatic) {
$this->addStaticProperty($name, $value);
} else {
$this->addProperty($name, $value);
}
}
}
return $this;
}