3 && ctype_upper($name[3])) { $name = lcfirst(substr($name, 3)); return $this->hasModule($name); } if ($this->hasModule($name)) { return $this->modules[$name]; } throw new InvalidArgumentException('Invalid property.'); } /** * Adds a module to this application. * @param string $name * @param mixed $module */ public function addModule(string $name, $module): void { if ($this->hasModule($name)) { throw new InvalidArgumentException('This module has already been registered.'); } $this->modules[$name] = $module; } /** * Checks if a module is registered. * @param string $name * @return bool */ public function hasModule(string $name): bool { return array_key_exists($name, $this->modules) && !is_null($this->modules[$name]); } }