|
|
|
|
@ -55,6 +55,7 @@ class ClassLoader |
|
|
|
|
private $classMap = array(); |
|
|
|
|
private $classMapAuthoritative = false; |
|
|
|
|
private $missingClasses = array(); |
|
|
|
|
private $apcuPrefix; |
|
|
|
|
|
|
|
|
|
public function getPrefixes() |
|
|
|
|
{ |
|
|
|
|
@ -271,6 +272,26 @@ class ClassLoader |
|
|
|
|
return $this->classMapAuthoritative; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. |
|
|
|
|
* |
|
|
|
|
* @param string|null $apcuPrefix |
|
|
|
|
*/ |
|
|
|
|
public function setApcuPrefix($apcuPrefix) |
|
|
|
|
{ |
|
|
|
|
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* The APCu prefix in use, or null if APCu caching is not enabled. |
|
|
|
|
* |
|
|
|
|
* @return string|null |
|
|
|
|
*/ |
|
|
|
|
public function getApcuPrefix() |
|
|
|
|
{ |
|
|
|
|
return $this->apcuPrefix; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Registers this instance as an autoloader. |
|
|
|
|
* |
|
|
|
|
@ -313,11 +334,6 @@ class ClassLoader |
|
|
|
|
*/ |
|
|
|
|
public function findFile($class) |
|
|
|
|
{ |
|
|
|
|
// work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 |
|
|
|
|
if ('\\' == $class[0]) { |
|
|
|
|
$class = substr($class, 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// class map lookup |
|
|
|
|
if (isset($this->classMap[$class])) { |
|
|
|
|
return $this->classMap[$class]; |
|
|
|
|
@ -325,6 +341,12 @@ class ClassLoader |
|
|
|
|
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
if (null !== $this->apcuPrefix) { |
|
|
|
|
$file = apcu_fetch($this->apcuPrefix.$class, $hit); |
|
|
|
|
if ($hit) { |
|
|
|
|
return $file; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$file = $this->findFileWithExtension($class, '.php'); |
|
|
|
|
|
|
|
|
|
@ -333,6 +355,10 @@ class ClassLoader |
|
|
|
|
$file = $this->findFileWithExtension($class, '.hh'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (null !== $this->apcuPrefix) { |
|
|
|
|
apcu_add($this->apcuPrefix.$class, $file); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (false === $file) { |
|
|
|
|
// Remember that this class does not exist. |
|
|
|
|
$this->missingClasses[$class] = true; |
|
|
|
|
|