public function add()
{
$args_num = func_num_args();
$args = func_get_args();
switch ($args_num) {
case 1:
if (is_callable($args[0])) {
return $this->addFunction($args[0]);
} elseif (is_array($args[0])) {
return $this->addFunctions($args[0]);
} elseif (is_object($args[0])) {
return $this->addInstanceMethods($args[0]);
} elseif (is_string($args[0])) {
return $this->addClassMethods($args[0]);
}
break;
case 2:
if (is_callable($args[0]) && is_string($args[1])) {
return $this->addFunction($args[0], $args[1]);
} elseif (is_string($args[0])) {
if (is_string($args[1]) && !is_callable(array($args[1], $args[0]))) {
if (class_exists($args[1])) {
return $this->addClassMethods($args[0], $args[1]);
}
return $this->addClassMethods($args[0], '', $args[1]);
}
return $this->addMethod($args[0], $args[1]);
} elseif (is_array($args[0])) {
if (is_array($args[1])) {
return $this->addFunctions($args[0], $args[1]);
}
return $this->addMethods($args[0], $args[1]);
} elseif (is_object($args[0])) {
return $this->addInstanceMethods($args[0], $args[1]);
}
break;
case 3:
if (is_callable($args[0]) && $args[1] == '' && is_string($args[2])) {
return $this->addFunction($args[0], $args[2]);
} elseif (is_string($args[0]) && is_string($args[2])) {
if (is_string($args[1]) && !is_callable(array($args[1], $args[0]))) {
return $this->addClassMethods($args[0], $args[1], $args[2]);
}
return $this->addMethod($args[0], $args[1], $args[2]);
} elseif (is_array($args[0])) {
if ($args[1] == '' && is_array($args[2])) {
return $this->addFunctions($args[0], $args[2]);
}
return $this->addMethods($args[0], $args[1], $args[2]);
} elseif (is_object($args[0])) {
return $this->addInstanceMethods($args[0], $args[1], $args[2]);
}
break;
}
throw new Exception('Wrong arguments');
}