Тут можно добавить компонент либо на основе класса, либо на основе вью. И эти две логики не имеют ничего общего.
Весь этот код буквально плачет и кричит: тут должны быть два метода!
addClassComponent() и addViewComponent()public function addComponent($name = null, $viewPath = null, $class = null): void
{
// Support $name being used a single argument for class-based components...
if ($name !== null && $class === null && $viewPath === null) {
$class = $name;
$name = null;
}
if (is_object($class)) {
$class = get_class($class);
}
// Support $class being used a single named argument for class-based components...
if ($name === null && $class !== null && $viewPath === null) {
$name = $this->generateHashName($class);
}
if ($name == null && $class === null && $viewPath !== null) {
throw new \Exception('You must provide a name when registering a single/multi-file component');
}
if ($name) {
if ($class !== null) $this->classComponents[$name] = $this->normalizeClassName($class);
elseif ($viewPath !== null) $this->viewComponents[$name] = $viewPath;
}
}