Ver código fonte

[ClassLoader] created protected findFile() method to allow creating a cache layer via inheritance

Kris Wallsmith 14 anos atrás
pai
commit
757e4ea4d6

+ 19 - 9
src/Symfony/Component/ClassLoader/UniversalClassLoader.php

@@ -181,12 +181,26 @@ class UniversalClassLoader
      * @param string $class The name of the class
      */
     public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            require $file;
+        }
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|null The path, if found
+     */
+    protected function findFile($class)
     {
         if ('\\' == $class[0]) {
             $class = substr($class, 1);
         }
 
-        if (false !== ($pos = strrpos($class, '\\'))) {
+        if (false !== $pos = strrpos($class, '\\')) {
             // namespaced class name
             $namespace = substr($class, 0, $pos);
             foreach ($this->namespaces as $ns => $dirs) {
@@ -195,8 +209,7 @@ class UniversalClassLoader
                         $className = substr($class, $pos + 1);
                         $file = $dir.DIRECTORY_SEPARATOR.str_replace('\\', DIRECTORY_SEPARATOR, $namespace).DIRECTORY_SEPARATOR.str_replace('_', DIRECTORY_SEPARATOR, $className).'.php';
                         if (file_exists($file)) {
-                            require $file;
-                            return;
+                            return $file;
                         }
                     }
                 }
@@ -205,8 +218,7 @@ class UniversalClassLoader
             foreach ($this->namespaceFallback as $dir) {
                 $file = $dir.DIRECTORY_SEPARATOR.str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php';
                 if (file_exists($file)) {
-                    require $file;
-                    return;
+                    return $file;
                 }
             }
         } else {
@@ -216,8 +228,7 @@ class UniversalClassLoader
                     if (0 === strpos($class, $prefix)) {
                         $file = $dir.DIRECTORY_SEPARATOR.str_replace('_', DIRECTORY_SEPARATOR, $class).'.php';
                         if (file_exists($file)) {
-                            require $file;
-                            return;
+                            return $file;
                         }
                     }
                 }
@@ -226,8 +237,7 @@ class UniversalClassLoader
             foreach ($this->prefixFallback as $dir) {
                 $file = $dir.DIRECTORY_SEPARATOR.str_replace('_', DIRECTORY_SEPARATOR, $class).'.php';
                 if (file_exists($file)) {
-                    require $file;
-                    return;
+                    return $file;
                 }
             }
         }