ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
Composer\Autoload\ClassLoader Class Reference

ClassLoader implements a PSR-0, PSR-4 and classmap class loader. More...

+ Collaboration diagram for Composer\Autoload\ClassLoader:

Public Member Functions

 getPrefixes ()
 
 getPrefixesPsr4 ()
 
 getFallbackDirs ()
 
 getFallbackDirsPsr4 ()
 
 getClassMap ()
 
 addClassMap (array $classMap)
 
 add ($prefix, $paths, $prepend=false)
 Registers a set of PSR-0 directories for a given prefix, either appending or prepending to the ones previously set for this prefix. More...
 
 addPsr4 ($prefix, $paths, $prepend=false)
 Registers a set of PSR-4 directories for a given namespace, either appending or prepending to the ones previously set for this namespace. More...
 
 set ($prefix, $paths)
 Registers a set of PSR-0 directories for a given prefix, replacing any others previously set for this prefix. More...
 
 setPsr4 ($prefix, $paths)
 Registers a set of PSR-4 directories for a given namespace, replacing any others previously set for this namespace. More...
 
 setUseIncludePath ($useIncludePath)
 Turns on searching the include path for class files. More...
 
 getUseIncludePath ()
 Can be used to check if the autoloader uses the include path to check for classes. More...
 
 setClassMapAuthoritative ($classMapAuthoritative)
 Turns off searching the prefix and fallback directories for classes that have not been registered with the class map. More...
 
 isClassMapAuthoritative ()
 Should class lookup fail if not found in the current class map? More...
 
 setApcuPrefix ($apcuPrefix)
 APCu prefix to use to cache found/not-found classes, if the extension is enabled. More...
 
 getApcuPrefix ()
 The APCu prefix in use, or null if APCu caching is not enabled. More...
 
 register ($prepend=false)
 Registers this instance as an autoloader. More...
 
 unregister ()
 Unregisters this instance as an autoloader. More...
 
 loadClass ($class)
 Loads the given class or interface. More...
 
 findFile ($class)
 Finds the path to the file where the class is defined. More...
 

Private Member Functions

 findFileWithExtension ($class, $ext)
 

Private Attributes

 $prefixLengthsPsr4 = array()
 
 $prefixDirsPsr4 = array()
 
 $fallbackDirsPsr4 = array()
 
 $prefixesPsr0 = array()
 
 $fallbackDirsPsr0 = array()
 
 $useIncludePath = false
 
 $classMap = array()
 
 $classMapAuthoritative = false
 
 $missingClasses = array()
 
 $apcuPrefix
 

Detailed Description

ClassLoader implements a PSR-0, PSR-4 and classmap class loader.

$loader = new \Composer\Autoload\ClassLoader();

// register classes with namespaces
$loader->add('Symfony\Component', __DIR__.'/component');
$loader->add('Symfony',           __DIR__.'/framework');

// activate the autoloader
$loader->register();

// to enable searching the include path (eg. for PEAR packages)
$loader->setUseIncludePath(true);

In this example, if you try to use a class in the Symfony\Component namespace or one of its children (Symfony\Component\Console for instance), the autoloader will first look for the class under the component/ directory, and it will then fallback to the framework/ directory if not found before giving up.

This class is loosely based on the Symfony UniversalClassLoader.

Author
Fabien Potencier fabie.nosp@m.n@sy.nosp@m.mfony.nosp@m..com
Jordi Boggiano j.bog.nosp@m.gian.nosp@m.o@sel.nosp@m.d.be
See also
http://www.php-fig.org/psr/psr-0/
http://www.php-fig.org/psr/psr-4/

Definition at line 43 of file ClassLoader.php.

Member Function Documentation

◆ add()

Composer\Autoload\ClassLoader::add (   $prefix,
  $paths,
  $prepend = false 
)

Registers a set of PSR-0 directories for a given prefix, either appending or prepending to the ones previously set for this prefix.

Parameters
string$prefixThe prefix
array | string$pathsThe PSR-0 root directories
bool$prependWhether to prepend the directories

Definition at line 109 of file ClassLoader.php.

110 {
111 if (!$prefix) {
112 if ($prepend) {
113 $this->fallbackDirsPsr0 = array_merge(
114 (array) $paths,
115 $this->fallbackDirsPsr0
116 );
117 } else {
118 $this->fallbackDirsPsr0 = array_merge(
119 $this->fallbackDirsPsr0,
120 (array) $paths
121 );
122 }
123
124 return;
125 }
126
127 $first = $prefix[0];
128 if (!isset($this->prefixesPsr0[$first][$prefix])) {
129 $this->prefixesPsr0[$first][$prefix] = (array) $paths;
130
131 return;
132 }
133 if ($prepend) {
134 $this->prefixesPsr0[$first][$prefix] = array_merge(
135 (array) $paths,
136 $this->prefixesPsr0[$first][$prefix]
137 );
138 } else {
139 $this->prefixesPsr0[$first][$prefix] = array_merge(
140 $this->prefixesPsr0[$first][$prefix],
141 (array) $paths
142 );
143 }
144 }
if($argc< 2) $paths
Definition: migrateto20.php:44

References $paths.

◆ addClassMap()

Composer\Autoload\ClassLoader::addClassMap ( array  $classMap)
Parameters
array$classMapClass to filename map

Definition at line 92 of file ClassLoader.php.

93 {
94 if ($this->classMap) {
95 $this->classMap = array_merge($this->classMap, $classMap);
96 } else {
97 $this->classMap = $classMap;
98 }
99 }

References Composer\Autoload\ClassLoader\$classMap.

◆ addPsr4()

Composer\Autoload\ClassLoader::addPsr4 (   $prefix,
  $paths,
  $prepend = false 
)

Registers a set of PSR-4 directories for a given namespace, either appending or prepending to the ones previously set for this namespace.

Parameters
string$prefixThe prefix/namespace, with trailing '\'
array | string$pathsThe PSR-4 base directories
bool$prependWhether to prepend the directories
Exceptions

InvalidArgumentException

Definition at line 156 of file ClassLoader.php.

157 {
158 if (!$prefix) {
159 // Register directories for the root namespace.
160 if ($prepend) {
161 $this->fallbackDirsPsr4 = array_merge(
162 (array) $paths,
163 $this->fallbackDirsPsr4
164 );
165 } else {
166 $this->fallbackDirsPsr4 = array_merge(
167 $this->fallbackDirsPsr4,
168 (array) $paths
169 );
170 }
171 } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
172 // Register directories for a new namespace.
173 $length = strlen($prefix);
174 if ('\\' !== $prefix[$length - 1]) {
175 throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
176 }
177 $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
178 $this->prefixDirsPsr4[$prefix] = (array) $paths;
179 } elseif ($prepend) {
180 // Prepend directories for an already registered namespace.
181 $this->prefixDirsPsr4[$prefix] = array_merge(
182 (array) $paths,
183 $this->prefixDirsPsr4[$prefix]
184 );
185 } else {
186 // Append directories for an already registered namespace.
187 $this->prefixDirsPsr4[$prefix] = array_merge(
188 $this->prefixDirsPsr4[$prefix],
189 (array) $paths
190 );
191 }
192 }

References $paths.

◆ findFile()

Composer\Autoload\ClassLoader::findFile (   $class)

Finds the path to the file where the class is defined.

Parameters
string$classThe name of the class
Returns
string|false The path if found, false otherwise

Definition at line 335 of file ClassLoader.php.

336 {
337 // class map lookup
338 if (isset($this->classMap[$class])) {
339 return $this->classMap[$class];
340 }
341 if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
342 return false;
343 }
344 if (null !== $this->apcuPrefix) {
345 $file = apcu_fetch($this->apcuPrefix.$class, $hit);
346 if ($hit) {
347 return $file;
348 }
349 }
350
351 $file = $this->findFileWithExtension($class, '.php');
352
353 // Search for Hack files if we are running on HHVM
354 if (false === $file && defined('HHVM_VERSION')) {
355 $file = $this->findFileWithExtension($class, '.hh');
356 }
357
358 if (null !== $this->apcuPrefix) {
359 apcu_add($this->apcuPrefix.$class, $file);
360 }
361
362 if (false === $file) {
363 // Remember that this class does not exist.
364 $this->missingClasses[$class] = true;
365 }
366
367 return $file;
368 }
findFileWithExtension($class, $ext)

References Composer\Autoload\ClassLoader\findFileWithExtension().

Referenced by Composer\Autoload\ClassLoader\loadClass().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ findFileWithExtension()

Composer\Autoload\ClassLoader::findFileWithExtension (   $class,
  $ext 
)
private

Definition at line 370 of file ClassLoader.php.

371 {
372 // PSR-4 lookup
373 $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
374
375 $first = $class[0];
376 if (isset($this->prefixLengthsPsr4[$first])) {
377 $subPath = $class;
378 while (false !== $lastPos = strrpos($subPath, '\\')) {
379 $subPath = substr($subPath, 0, $lastPos);
380 $search = $subPath.'\\';
381 if (isset($this->prefixDirsPsr4[$search])) {
382 $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
383 foreach ($this->prefixDirsPsr4[$search] as $dir) {
384 if (file_exists($file = $dir . $pathEnd)) {
385 return $file;
386 }
387 }
388 }
389 }
390 }
391
392 // PSR-4 fallback dirs
393 foreach ($this->fallbackDirsPsr4 as $dir) {
394 if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
395 return $file;
396 }
397 }
398
399 // PSR-0 lookup
400 if (false !== $pos = strrpos($class, '\\')) {
401 // namespaced class name
402 $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
403 . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
404 } else {
405 // PEAR-like class name
406 $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
407 }
408
409 if (isset($this->prefixesPsr0[$first])) {
410 foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
411 if (0 === strpos($class, $prefix)) {
412 foreach ($dirs as $dir) {
413 if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
414 return $file;
415 }
416 }
417 }
418 }
419 }
420
421 // PSR-0 fallback dirs
422 foreach ($this->fallbackDirsPsr0 as $dir) {
423 if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
424 return $file;
425 }
426 }
427
428 // PSR-0 include paths.
429 if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
430 return $file;
431 }
432
433 return false;
434 }

Referenced by Composer\Autoload\ClassLoader\findFile().

+ Here is the caller graph for this function:

◆ getApcuPrefix()

Composer\Autoload\ClassLoader::getApcuPrefix ( )

The APCu prefix in use, or null if APCu caching is not enabled.

Returns
string|null

Definition at line 290 of file ClassLoader.php.

References Composer\Autoload\ClassLoader\$apcuPrefix.

◆ getClassMap()

Composer\Autoload\ClassLoader::getClassMap ( )

Definition at line 84 of file ClassLoader.php.

85 {
86 return $this->classMap;
87 }

References Composer\Autoload\ClassLoader\$classMap.

◆ getFallbackDirs()

Composer\Autoload\ClassLoader::getFallbackDirs ( )

◆ getFallbackDirsPsr4()

Composer\Autoload\ClassLoader::getFallbackDirsPsr4 ( )

◆ getPrefixes()

Composer\Autoload\ClassLoader::getPrefixes ( )

Definition at line 60 of file ClassLoader.php.

61 {
62 if (!empty($this->prefixesPsr0)) {
63 return call_user_func_array('array_merge', $this->prefixesPsr0);
64 }
65
66 return array();
67 }

◆ getPrefixesPsr4()

Composer\Autoload\ClassLoader::getPrefixesPsr4 ( )

◆ getUseIncludePath()

Composer\Autoload\ClassLoader::getUseIncludePath ( )

Can be used to check if the autoloader uses the include path to check for classes.

Returns
bool

Definition at line 249 of file ClassLoader.php.

References Composer\Autoload\ClassLoader\$useIncludePath.

◆ isClassMapAuthoritative()

Composer\Autoload\ClassLoader::isClassMapAuthoritative ( )

Should class lookup fail if not found in the current class map?

Returns
bool

Definition at line 270 of file ClassLoader.php.

References Composer\Autoload\ClassLoader\$classMapAuthoritative.

◆ loadClass()

Composer\Autoload\ClassLoader::loadClass (   $class)

Loads the given class or interface.

Parameters
string$classThe name of the class
Returns
bool|null True if loaded, null otherwise

Definition at line 319 of file ClassLoader.php.

320 {
321 if ($file = $this->findFile($class)) {
322 includeFile($file);
323
324 return true;
325 }
326 }
findFile($class)
Finds the path to the file where the class is defined.
includeFile($file)
Scope isolated include.

References Composer\Autoload\ClassLoader\findFile(), and Composer\Autoload\includeFile().

+ Here is the call graph for this function:

◆ register()

Composer\Autoload\ClassLoader::register (   $prepend = false)

Registers this instance as an autoloader.

Parameters
bool$prependWhether to prepend the autoloader or not

Definition at line 300 of file ClassLoader.php.

301 {
302 spl_autoload_register(array($this, 'loadClass'), true, $prepend);
303 }

◆ set()

Composer\Autoload\ClassLoader::set (   $prefix,
  $paths 
)

Registers a set of PSR-0 directories for a given prefix, replacing any others previously set for this prefix.

Parameters
string$prefixThe prefix
array | string$pathsThe PSR-0 base directories

Definition at line 201 of file ClassLoader.php.

202 {
203 if (!$prefix) {
204 $this->fallbackDirsPsr0 = (array) $paths;
205 } else {
206 $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
207 }
208 }

References $paths.

◆ setApcuPrefix()

Composer\Autoload\ClassLoader::setApcuPrefix (   $apcuPrefix)

APCu prefix to use to cache found/not-found classes, if the extension is enabled.

Parameters
string | null$apcuPrefix

Definition at line 280 of file ClassLoader.php.

281 {
282 $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
283 }

References Composer\Autoload\ClassLoader\$apcuPrefix.

◆ setClassMapAuthoritative()

Composer\Autoload\ClassLoader::setClassMapAuthoritative (   $classMapAuthoritative)

Turns off searching the prefix and fallback directories for classes that have not been registered with the class map.

Parameters
bool$classMapAuthoritative

Definition at line 260 of file ClassLoader.php.

261 {
262 $this->classMapAuthoritative = $classMapAuthoritative;
263 }

References Composer\Autoload\ClassLoader\$classMapAuthoritative.

◆ setPsr4()

Composer\Autoload\ClassLoader::setPsr4 (   $prefix,
  $paths 
)

Registers a set of PSR-4 directories for a given namespace, replacing any others previously set for this namespace.

Parameters
string$prefixThe prefix/namespace, with trailing '\'
array | string$pathsThe PSR-4 base directories
Exceptions

InvalidArgumentException

Definition at line 219 of file ClassLoader.php.

220 {
221 if (!$prefix) {
222 $this->fallbackDirsPsr4 = (array) $paths;
223 } else {
224 $length = strlen($prefix);
225 if ('\\' !== $prefix[$length - 1]) {
226 throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
227 }
228 $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
229 $this->prefixDirsPsr4[$prefix] = (array) $paths;
230 }
231 }

References $paths.

◆ setUseIncludePath()

Composer\Autoload\ClassLoader::setUseIncludePath (   $useIncludePath)

Turns on searching the include path for class files.

Parameters
bool$useIncludePath

Definition at line 238 of file ClassLoader.php.

239 {
240 $this->useIncludePath = $useIncludePath;
241 }

References Composer\Autoload\ClassLoader\$useIncludePath.

◆ unregister()

Composer\Autoload\ClassLoader::unregister ( )

Unregisters this instance as an autoloader.

Definition at line 308 of file ClassLoader.php.

309 {
310 spl_autoload_unregister(array($this, 'loadClass'));
311 }

Field Documentation

◆ $apcuPrefix

Composer\Autoload\ClassLoader::$apcuPrefix
private

◆ $classMap

Composer\Autoload\ClassLoader::$classMap = array()
private

◆ $classMapAuthoritative

Composer\Autoload\ClassLoader::$classMapAuthoritative = false
private

◆ $fallbackDirsPsr0

Composer\Autoload\ClassLoader::$fallbackDirsPsr0 = array()
private

Definition at line 52 of file ClassLoader.php.

Referenced by Composer\Autoload\ClassLoader\getFallbackDirs().

◆ $fallbackDirsPsr4

Composer\Autoload\ClassLoader::$fallbackDirsPsr4 = array()
private

Definition at line 48 of file ClassLoader.php.

Referenced by Composer\Autoload\ClassLoader\getFallbackDirsPsr4().

◆ $missingClasses

Composer\Autoload\ClassLoader::$missingClasses = array()
private

Definition at line 57 of file ClassLoader.php.

◆ $prefixDirsPsr4

Composer\Autoload\ClassLoader::$prefixDirsPsr4 = array()
private

Definition at line 47 of file ClassLoader.php.

Referenced by Composer\Autoload\ClassLoader\getPrefixesPsr4().

◆ $prefixesPsr0

Composer\Autoload\ClassLoader::$prefixesPsr0 = array()
private

Definition at line 51 of file ClassLoader.php.

◆ $prefixLengthsPsr4

Composer\Autoload\ClassLoader::$prefixLengthsPsr4 = array()
private

Definition at line 46 of file ClassLoader.php.

◆ $useIncludePath

Composer\Autoload\ClassLoader::$useIncludePath = false
private

The documentation for this class was generated from the following file: