1
0
Fork 0

Fix BC of generated static map

pull/6973/head
Nicolas Grekas 2018-01-04 13:33:31 +01:00
parent c962be2f41
commit ce70e0e9dd
2 changed files with 5 additions and 7 deletions

View File

@ -785,10 +785,7 @@ HEADER;
// BC handling when converting to a new ClassLoader // BC handling when converting to a new ClassLoader
if (isset($maps['prefixLengthsPsr4'])) { if (isset($maps['prefixLengthsPsr4'])) {
$maps['firstCharsPsr4'] = array_map(function () { $maps['firstCharsPsr4'] = array_map('is_array', $maps['prefixLengthsPsr4']);
return true;
}, $maps['prefixLengthsPsr4']);
unset($maps['prefixLengthsPsr4']);
} }
foreach ($maps as $prop => $value) { foreach ($maps as $prop => $value) {

View File

@ -44,6 +44,7 @@ class ClassLoader
{ {
// PSR-4 // PSR-4
private $firstCharsPsr4 = array(); private $firstCharsPsr4 = array();
private $prefixLengthsPsr4 = array(); // For BC with legacy static maps
private $prefixDirsPsr4 = array(); private $prefixDirsPsr4 = array();
private $fallbackDirsPsr4 = array(); private $fallbackDirsPsr4 = array();
@ -371,15 +372,15 @@ class ClassLoader
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0]; $first = $class[0];
if (isset($this->firstCharsPsr4[$first])) { if (isset($this->firstCharsPsr4[$first]) || isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class; $subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) { while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos); $subPath = substr($subPath, 0, $lastPos);
$search = $subPath.'\\'; $search = $subPath.'\\';
if (isset($this->prefixDirsPsr4[$search])) { if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = substr($logicalPathPsr4, $lastPos + 1); $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) { foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $pathEnd)) { if (file_exists($file = $dir . $pathEnd)) {
return $file; return $file;
} }
} }