public static function path($class, array $options = []) {
		$defaults = ['dirs' => false];
		$options += $defaults;
		$class = ltrim($class, '\\');

		if (isset(static::$_cachedPaths[$class]) && !$options['dirs']) {
			return static::$_cachedPaths[$class];
		}
		if (isset(static::$_map[$class]) && !$options['dirs']) {
			return static::$_map[$class];
		}
		foreach (static::$_configurations as $name => $config) {
			$params = $options + $config;
			$suffix = $params['suffix'];

			if ($params['prefix'] && strpos($class, $params['prefix']) !== 0) {
				continue;
			}
			if ($transform = $params['transform']) {
				if ($file = static::_transformPath($transform, $class, $params)) {
					return $file;
				}
				continue;
			}
			$path = str_replace("\\", '/', substr($class, strlen($params['prefix'])));
			$fullPath = "{$params['path']}/{$path}";

			if (!$options['dirs']) {
				return static::$_cachedPaths[$class] = static::realPath($fullPath . $suffix);
			}
			$list = glob(dirname($fullPath) . '/*');
			$list = array_map(function($i) { return str_replace('\\', '/', $i); }, $list);

			if (in_array($fullPath . $suffix, $list)) {
				return static::$_cachedPaths[$class] = static::realPath($fullPath . $suffix);
			}
			return is_dir($fullPath) ? static::realPath($fullPath) : null;
		}
	}
public static function path($class, array $options = []) {
		$defaults = ['dirs' => false];
		$options += $defaults;
		$class = ltrim($class, '\\');

		if (isset(static::$_cachedPaths[$class]) && !$options['dirs']) {
			return static::$_cachedPaths[$class];
		}
		if (isset(static::$_map[$class]) && !$options['dirs']) {
			return static::$_map[$class];
		}
		foreach (static::$_configurations as $name => $config) {
			$params = $options + $config;
			$suffix = $params['suffix'];

			if ($params['prefix'] && strpos($class, $params['prefix']) !== 0) {
				continue;
			}
			if ($transform = $params['transform']) {
				if ($file = static::_transformPath($transform, $class, $params)) {
					return $file;
				}
				continue;
			}
			$path = str_replace("\\", '/', substr($class, strlen($params['prefix'])));
			$fullPath = "{$params['path']}/{$path}";

			if (!$options['dirs']) {
				return static::$_cachedPaths[$class] = static::realPath($fullPath . $suffix);
			}
			$list = glob(dirname($fullPath) . '/*');
			$list = array_map(function($i) { return str_replace('\\', '/', $i); }, $list);

			if (in_array($fullPath . $suffix, $list)) {
				return static::$_cachedPaths[$class] = static::realPath($fullPath . $suffix);
			}
			return is_dir($fullPath) ? static::realPath($fullPath) : null;
		}
	}
public static function path ( $ class , array $ options = [ ] ) { $ defaults = [ 'dirs' => false ] ; $ options += $ defaults ; $ class = ltrim ( $ class , '\\' ) ; if ( isset ( static :: $ _cachedPaths [ $ class ] ) && ! $ options [ 'dirs' ] ) { return static :: $ _cachedPaths [ $ class ] ; } if ( isset ( static :: $ _map [ $ class ] ) && ! $ options [ 'dirs' ] ) { return static :: $ _map [ $ class ] ; } foreach ( static :: $ _configurations as $ name => $ config ) { $ params = $ options + $ config ; $ suffix = $ params [ 'suffix' ] ; if ( $ params [ 'prefix' ] && strpos ( $ class , $ params [ 'prefix' ] ) !== 0 ) { continue ; } if ( $ transform = $ params [ 'transform' ] ) { if ( $ file = static :: _transformPath ( $ transform , $ class , $ params ) ) { return $ file ; } continue ; } $ path = str_replace ( "\\" , '/' , substr ( $ class , strlen ( $ params [ 'prefix' ] ) ) ) ; $ fullPath = "{$params['path']}/{$path}" ; if ( ! $ options [ 'dirs' ] ) { return static :: $ _cachedPaths [ $ class ] = static :: realPath ( $ fullPath . $ suffix ) ; } $ list = glob ( dirname ( $ fullPath ) . '/*' ) ; $ list = array_map ( function ( $ i ) { return str_replace ( '\\' , '/' , $ i ) ; } , $ list ) ; if ( in_array ( $ fullPath . $ suffix , $ list ) ) { return static :: $ _cachedPaths [ $ class ] = static :: realPath ( $ fullPath . $ suffix ) ; } return is_dir ( $ fullPath ) ? static :: realPath ( $ fullPath ) : null ; } }
Get the corresponding physical file path for a class or namespace name.

@param string $class The class name to locate the physical file for. If `$options['dirs']` is
set to `true`, `$class` may also be a namespace name, in which case the corresponding
directory will be located.
@param array $options Options for converting `$class` to a physical path:
- `'dirs'`: Defaults to `false`. If `true`, will attempt to case-sensitively look up
directories in addition to files (in which case `$class` is assumed to actually be a
namespace).
@return string Returns the absolute path to the file containing `$class`, or `null` if the
file cannot be found.
Get the corresponding physical file path for a class or namespace name .