Removed local PSR-4 autoloader implementation.
I've fully moved to Composer and its autoloader is more optimised than this one could ever hope to be.
This commit is contained in:
parent
4d41d3218e
commit
285e2de40c
3 changed files with 1 additions and 117 deletions
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
0.2407.311910
|
0.2407.311911
|
||||||
|
|
|
@ -8,14 +8,6 @@ namespace Index;
|
||||||
define('NDX_ROOT', __DIR__);
|
define('NDX_ROOT', __DIR__);
|
||||||
define('NDX_DIR_SRC', NDX_ROOT . DIRECTORY_SEPARATOR . 'src');
|
define('NDX_DIR_SRC', NDX_ROOT . DIRECTORY_SEPARATOR . 'src');
|
||||||
|
|
||||||
// Only initialise the autoloader if Composer's autoloader doesn't exist yet
|
|
||||||
if(!class_exists(\Composer\Autoload\ClassLoader::class)) {
|
|
||||||
require_once NDX_DIR_SRC . DIRECTORY_SEPARATOR . 'Autoloader.php';
|
|
||||||
|
|
||||||
Autoloader::addNamespace(__NAMESPACE__, NDX_DIR_SRC);
|
|
||||||
Autoloader::register();
|
|
||||||
}
|
|
||||||
|
|
||||||
// currently phpstan sucks and relies on error suppression, luckily it leaves a constant!
|
// currently phpstan sucks and relies on error suppression, luckily it leaves a constant!
|
||||||
if(!defined('__PHPSTAN_RUNNING__')) {
|
if(!defined('__PHPSTAN_RUNNING__')) {
|
||||||
// defining this WILL cause issues, never do it unless you HAVE to
|
// defining this WILL cause issues, never do it unless you HAVE to
|
||||||
|
|
|
@ -1,108 +0,0 @@
|
||||||
<?php
|
|
||||||
// Autoloader.php
|
|
||||||
// Created: 2021-05-04
|
|
||||||
// Updated: 2021-05-12
|
|
||||||
|
|
||||||
namespace Index;
|
|
||||||
|
|
||||||
use InvalidArgumentException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides a simple PSR-4 style autoloader.
|
|
||||||
*
|
|
||||||
* Only basic types should be used in this class because this is the first file included
|
|
||||||
* and obviously can't autoload things before it has been set up.
|
|
||||||
*/
|
|
||||||
final class Autoloader {
|
|
||||||
private const EXTENSION = '.php';
|
|
||||||
|
|
||||||
private static array $namespaces = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers this autoloader with PHP.
|
|
||||||
*/
|
|
||||||
public static function register(): void {
|
|
||||||
spl_autoload_register([self::class, 'autoloader']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregistered this autoloader with PHP.
|
|
||||||
*/
|
|
||||||
public static function unregister(): void {
|
|
||||||
spl_autoload_unregister([self::class, 'autoloader']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cleans a PHP class path for file system look up.
|
|
||||||
*
|
|
||||||
* @param string $name A PHP class path.
|
|
||||||
* @return string A cleaned PHP class path.
|
|
||||||
*/
|
|
||||||
public static function cleanName(string $name): string {
|
|
||||||
return trim($name, '\\');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tries to find a class in the registered namespaces directories.
|
|
||||||
*
|
|
||||||
* Only supports the .php extension, others are silly and only add overhead.
|
|
||||||
*
|
|
||||||
* @param string $className Target class path.
|
|
||||||
*/
|
|
||||||
public static function autoloader(string $className): void {
|
|
||||||
$classPath = explode('\\', self::cleanName($className));
|
|
||||||
|
|
||||||
for($i = 0; $i < count($classPath); ++$i) {
|
|
||||||
$rootSpace = implode('\\', array_slice($classPath, 0, $i + 1));
|
|
||||||
|
|
||||||
if(isset(self::$namespaces[$rootSpace])) {
|
|
||||||
$path = self::$namespaces[$rootSpace]
|
|
||||||
. DIRECTORY_SEPARATOR
|
|
||||||
. implode(DIRECTORY_SEPARATOR, array_slice($classPath, $i + 1))
|
|
||||||
. self::EXTENSION;
|
|
||||||
|
|
||||||
if(is_file($path)) {
|
|
||||||
require_once $path;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a directory with a namespace. Projects making use of Index may use this.
|
|
||||||
*
|
|
||||||
* @param string $namespace Target namespace.
|
|
||||||
* @param string $directory Directory containing the classes of this namespace.
|
|
||||||
* @throws InvalidArgumentException if $namespace is an empty string.
|
|
||||||
* @throws InvalidArgumentException if $directory is a non-existent directory.
|
|
||||||
* @throws InvalidArgumentException if $namespace is already registered.
|
|
||||||
*/
|
|
||||||
public static function addNamespace(string $namespace, string $directory): void {
|
|
||||||
if(empty($namespace))
|
|
||||||
throw new InvalidArgumentException('$namespace may not be an empty string.');
|
|
||||||
if(!is_dir($directory))
|
|
||||||
throw new InvalidArgumentException('$directory must point to an existing directory.');
|
|
||||||
|
|
||||||
$namespace = self::cleanName($namespace);
|
|
||||||
$directory = rtrim(realpath($directory), DIRECTORY_SEPARATOR);
|
|
||||||
|
|
||||||
if(isset(self::$namespaces[$namespace]))
|
|
||||||
throw new InvalidArgumentException("{$namespace} is already a registered namespace.");
|
|
||||||
|
|
||||||
self::$namespaces[$namespace] = $directory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes a registered namespace.
|
|
||||||
*
|
|
||||||
* Attempts to unregister Index are ignored.
|
|
||||||
*
|
|
||||||
* @param string $namespace Namespace to be removed.
|
|
||||||
*/
|
|
||||||
public static function removeNamespace(string $namespace): void {
|
|
||||||
$namespace = self::cleanName($namespace);
|
|
||||||
if($namespace !== 'Index')
|
|
||||||
unset(self::$namespaces[$namespace]);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue