X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2FAutoLoader.php;h=6e7705653fea9abb98b26159b17252ee4298871a;hp=8dc7d4094a0b983237996173637c9bff89a61bd7;hb=a7064a0883ec6d715c8c8103efe777769a85437d;hpb=d24af42ffff087a0824f6e9abefa33cab3e4e835 diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 8dc7d4094a..6e7705653f 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -30,6 +30,12 @@ require_once __DIR__ . '/../autoload.php'; class AutoLoader { static protected $autoloadLocalClassesLower = null; + /** + * @private Only public for ExtensionRegistry + * @var string[] Namespace (ends with \) => Path (ends with /) + */ + static public $psr4Namespaces = []; + /** * autoload - take a class name and attempt to load it * @@ -67,6 +73,28 @@ class AutoLoader { } } + if ( !$filename && strpos( $className, '\\' ) !== false ) { + // This class is namespaced, so try looking at the namespace map + $prefix = $className; + while ( false !== $pos = strrpos( $prefix, '\\' ) ) { + // Check to see if this namespace prefix is in the map + $prefix = substr( $className, 0, $pos + 1 ); + if ( isset( self::$psr4Namespaces[$prefix] ) ) { + $relativeClass = substr( $className, $pos + 1 ); + // Build the expected filename, and see if it exists + $file = self::$psr4Namespaces[$prefix] . '/' . + str_replace( '\\', '/', $relativeClass ) . '.php'; + if ( file_exists( $file ) ) { + $filename = $file; + break; + } + } + + // Remove trailing separator for next iteration + $prefix = rtrim( $prefix, '\\' ); + } + } + if ( !$filename ) { // Class not found; let the next autoloader try to find it return; @@ -88,6 +116,22 @@ class AutoLoader { static function resetAutoloadLocalClassesLower() { self::$autoloadLocalClassesLower = null; } + + /** + * Get a mapping of namespace => file path + * The namespaces should follow the PSR-4 standard for autoloading + * + * @see + * @private Only public for usage in AutoloadGenerator + * @since 1.31 + * @return string[] + */ + public static function getAutoloadNamespaces() { + return [ + 'MediaWiki\\Linker\\' => __DIR__ .'/linker/' + ]; + } } +AutoLoader::$psr4Namespaces = AutoLoader::getAutoloadNamespaces(); spl_autoload_register( [ 'AutoLoader', 'autoload' ] );