Browse Source

- Adding prefix option to ClassLoader::add()
- Adding set method to ClassLoader for overwriting

Joe Holdcroft 12 years ago
parent
commit
e74223470a
1 changed files with 33 additions and 8 deletions
  1. 33 8
      src/Composer/Autoload/ClassLoader.php

+ 33 - 8
src/Composer/Autoload/ClassLoader.php

@@ -75,12 +75,13 @@ class ClassLoader
     }
 
     /**
-     * Registers a set of classes
+     * Registers a set of classes, merging with any others previously set.
      *
-     * @param string       $prefix The classes prefix
-     * @param array|string $paths  The location(s) of the classes
+     * @param string       $prefix  The classes prefix
+     * @param array|string $paths   The location(s) of the classes
+     * @param bool         $prepend Prepend the location(s)
      */
-    public function add($prefix, $paths)
+    public function add($prefix, $paths, $prepend = false)
     {
         if (!$prefix) {
             foreach ((array) $paths as $path) {
@@ -90,15 +91,39 @@ class ClassLoader
             return;
         }
         if (isset($this->prefixes[$prefix])) {
-            $this->prefixes[$prefix] = array_merge(
-                $this->prefixes[$prefix],
-                (array) $paths
-            );
+            if ($prepend) {
+                $this->prefixes[$prefix] = array_merge(
+                    (array) $paths,
+                    $this->prefixes[$prefix]
+                );
+            }
+            else {
+                $this->prefixes[$prefix] = array_merge(
+                    $this->prefixes[$prefix],
+                    (array) $paths
+                );
+            }
         } else {
             $this->prefixes[$prefix] = (array) $paths;
         }
     }
 
+    /**
+     * Registers a set of classes, replacing any others previously set.
+     *
+     * @param string       $prefix  The classes prefix
+     * @param array|string $paths   The location(s) of the classes
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirs = (array) $path;
+
+            return;
+        }
+        $this->prefixes[$prefix] = (array) $paths;
+    }
+
     /**
      * Turns on searching the include path for class files.
      *