ILIAS  release_5-2 Revision v5.2.25-18-g3f80b82851
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 ();

// register classes with namespaces $loader->add('Symfony', 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 namespace or one of its children (Symfony 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.

References array.

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  }
Create styles array
The data for the language used.

◆ addClassMap()

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

Definition at line 92 of file ClassLoader.php.

References Composer\Autoload\ClassLoader\$classMap.

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

◆ 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

Definition at line 156 of file ClassLoader.php.

References array.

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  }
Create styles array
The data for the language used.

◆ 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.

References $file, defined, and Composer\Autoload\ClassLoader\findFileWithExtension().

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

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)
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
defined( 'APPLICATION_ENV')||define( 'APPLICATION_ENV'
Definition: bootstrap.php:27
+ 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.

References $file.

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

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  foreach ($this->prefixDirsPsr4[$search] as $dir) {
383  $length = $this->prefixLengthsPsr4[$first][$search];
384  if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
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  }
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
+ 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.

291  {
292  return $this->apcuPrefix;
293  }

◆ getClassMap()

Composer\Autoload\ClassLoader::getClassMap ( )

Definition at line 84 of file ClassLoader.php.

References Composer\Autoload\ClassLoader\$classMap.

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

◆ getFallbackDirs()

Composer\Autoload\ClassLoader::getFallbackDirs ( )

◆ getFallbackDirsPsr4()

Composer\Autoload\ClassLoader::getFallbackDirsPsr4 ( )

◆ getPrefixes()

Composer\Autoload\ClassLoader::getPrefixes ( )

Definition at line 60 of file ClassLoader.php.

References array.

61  {
62  if (!empty($this->prefixesPsr0)) {
63  return call_user_func_array('array_merge', $this->prefixesPsr0);
64  }
65 
66  return array();
67  }
Create styles array
The data for the language used.

◆ getPrefixesPsr4()

Composer\Autoload\ClassLoader::getPrefixesPsr4 ( )

Definition at line 69 of file ClassLoader.php.

References Composer\Autoload\ClassLoader\$prefixDirsPsr4.

70  {
71  return $this->prefixDirsPsr4;
72  }

◆ 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.

250  {
251  return $this->useIncludePath;
252  }

◆ 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.

271  {
273  }

◆ 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.

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

320  {
321  if ($file = $this->findFile($class)) {
323 
324  return true;
325  }
326  }
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
includeFile($file)
Scope isolated include.
findFile($class)
Finds the path to the file where the class is defined.
+ 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.

References array.

301  {
302  spl_autoload_register(array($this, 'loadClass'), true, $prepend);
303  }
Create styles array
The data for the language used.

◆ 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.

References array.

202  {
203  if (!$prefix) {
204  $this->fallbackDirsPsr0 = (array) $paths;
205  } else {
206  $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
207  }
208  }
Create styles array
The data for the language used.

◆ 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.

References Composer\Autoload\ClassLoader\$apcuPrefix.

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

◆ 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.

References Composer\Autoload\ClassLoader\$classMapAuthoritative.

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

◆ 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

Definition at line 219 of file ClassLoader.php.

References array.

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  }
Create styles array
The data for the language used.

◆ 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.

References Composer\Autoload\ClassLoader\$useIncludePath.

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

◆ unregister()

Composer\Autoload\ClassLoader::unregister ( )

Unregisters this instance as an autoloader.

Definition at line 308 of file ClassLoader.php.

References array.

309  {
310  spl_autoload_unregister(array($this, 'loadClass'));
311  }
Create styles array
The data for the language used.

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: