diff --git a/phpstan.dist.neon b/phpstan.dist.neon index 57ab298..d104bd5 100644 --- a/phpstan.dist.neon +++ b/phpstan.dist.neon @@ -5,6 +5,5 @@ includes: parameters: level: 6 paths: - - flight - - index.php + - src treatPhpDocTypesAsCertain: false diff --git a/src/core/Loader.php b/src/core/Loader.php index bed0f0f..491af65 100644 --- a/src/core/Loader.php +++ b/src/core/Loader.php @@ -4,14 +4,12 @@ declare(strict_types=1); namespace flight\core; -use Closure; use Exception; /** * The Loader class is responsible for loading objects. It maintains a list of * reusable class instances and can generate a new class instances with custom * initialization parameters. It also performs class autoloading. - * * @license MIT, https://docs.flightphp.com/license/ * @copyright Copyright (c) 2011, Mike Cao */ @@ -19,50 +17,39 @@ class Loader { /** * Registered classes. - * - * @var array, ?callable}> $classes + * @var array, ?callable(object): void}> */ protected array $classes = []; - /** - * If this is disabled, classes can load with underscores - */ + /** If this is disabled, classes can load with underscores */ protected static bool $v2ClassLoading = true; - /** - * Class instances. - * - * @var array - */ + /** @var array Class instances */ protected array $instances = []; - /** - * Autoload directories. - * - * @var array - */ + /** @var array Autoload directories */ protected static array $dirs = []; /** * Registers a class. - * + * @template T of object * @param string $name Registry name - * @param class-string|Closure(): T $class Class name or function to instantiate class + * @param class-string|callable(): T $class Class name or function to instantiate class * @param array $params Class initialization parameters - * @param ?Closure(T $instance): void $callback $callback Function to call after object instantiation - * - * @template T of object + * @param ?callable(T): void $callback $callback Function to call after object instantiation */ - public function register(string $name, $class, array $params = [], ?callable $callback = null): void - { + public function register( + string $name, + $class, + array $params = [], + ?callable $callback = null + ): void { unset($this->instances[$name]); - $this->classes[$name] = [$class, $params, $callback]; } /** * Unregisters a class. - * * @param string $name Registry name */ public function unregister(string $name): void @@ -72,12 +59,9 @@ class Loader /** * Loads a registered class. - * - * @param string $name Method name - * @param bool $shared Shared instance - * + * @param string $name Method name + * @param bool $shared Shared instance * @throws Exception - * * @return ?object Class instance */ public function load(string $name, bool $shared = true): ?object @@ -85,14 +69,13 @@ class Loader $obj = null; if (isset($this->classes[$name])) { - [0 => $class, 1 => $params, 2 => $callback] = $this->classes[$name]; - + [$class, $params, $callback] = $this->classes[$name]; $exists = isset($this->instances[$name]); if ($shared) { - $obj = ($exists) ? - $this->getInstance($name) : - $this->newInstance($class, $params); + $obj = $exists + ? $this->getInstance($name) + : $this->newInstance($class, $params); if (!$exists) { $this->instances[$name] = $obj; @@ -103,7 +86,7 @@ class Loader if ($callback && (!$shared || !$exists)) { $ref = [&$obj]; - \call_user_func_array($callback, $ref); + call_user_func_array($callback, $ref); } } @@ -112,9 +95,7 @@ class Loader /** * Gets a single instance of a class. - * * @param string $name Instance name - * * @return ?object Class instance */ public function getInstance(string $name): ?object @@ -124,53 +105,43 @@ class Loader /** * Gets a new instance of a class. - * - * @param class-string|Closure(): class-string $class Class name or callback function to instantiate class - * @param array $params Class initialization parameters - * * @template T of object - * + * @param class-string|callable(): T $class Class name or callback function to instantiate class + * @param array $params Class initialization parameters * @throws Exception - * * @return T Class instance */ - public function newInstance($class, array $params = []) + public function newInstance($class, array $params = []): object { - if (\is_callable($class)) { - return \call_user_func_array($class, $params); + if (is_callable($class)) { + return call_user_func_array($class, $params); } return new $class(...$params); } /** - * Gets a registered callable - * + * Gets a registered callable. * @param string $name Registry name - * - * @return mixed Class information or null if not registered + * @return ?array{class-string|callable(): object, array, ?callable(object): void} + * Class information or null if not registered */ - public function get(string $name) + public function get(string $name): ?array { return $this->classes[$name] ?? null; } - /** - * Resets the object to the initial state. - */ + /** Resets the object to the initial state */ public function reset(): void { $this->classes = []; $this->instances = []; } - // Autoloading Functions - /** * Starts/stops autoloader. - * - * @param bool $enabled Enable/disable autoloading - * @param string|iterable $dirs Autoload directories + * @param bool $enabled Enable/disable autoloading + * @param string|iterable $dirs Autoload directories */ public static function autoload(bool $enabled = true, $dirs = []): void { @@ -187,14 +158,13 @@ class Loader /** * Autoloads classes. - * * Classes are not allowed to have underscores in their names. * * @param string $class Class name */ public static function loadClass(string $class): void { - $replace_chars = self::$v2ClassLoading === true ? ['\\', '_'] : ['\\']; + $replace_chars = self::$v2ClassLoading ? ['\\', '_'] : ['\\']; $classFile = str_replace($replace_chars, '/', $class) . '.php'; foreach (self::$dirs as $dir) { @@ -202,6 +172,7 @@ class Loader if (file_exists($filePath)) { require_once $filePath; + return; } } @@ -209,17 +180,16 @@ class Loader /** * Adds a directory for autoloading classes. - * * @param string|iterable $dir Directory path */ public static function addDirectory($dir): void { - if (\is_array($dir) || \is_object($dir)) { + if (is_array($dir) || is_object($dir)) { foreach ($dir as $value) { self::addDirectory($value); } - } elseif (\is_string($dir)) { - if (!\in_array($dir, self::$dirs, true)) { + } elseif (is_string($dir)) { + if (!in_array($dir, self::$dirs, true)) { self::$dirs[] = $dir; } } @@ -228,10 +198,7 @@ class Loader /** * Sets the value for V2 class loading. - * * @param bool $value The value to set for V2 class loading. - * - * @return void */ public static function setV2ClassLoading(bool $value): void {