فهرست منبع

Merge remote-tracking branch 'joeholdcroft/autoload-namespace-prepend'

Jordi Boggiano 12 سال پیش
والد
کامیت
1bd01a8b0b
1فایلهای تغییر یافته به همراه43 افزوده شده و 9 حذف شده
  1. 43 9
      src/Composer/Autoload/ClassLoader.php

+ 43 - 9
src/Composer/Autoload/ClassLoader.php

@@ -75,30 +75,64 @@ 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) {
-                $this->fallbackDirs[] = $path;
+            if ($prepend) {
+                $this->fallbackDirs = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirs
+                );
             }
+            else {
+                $this->fallbackDirs = array_merge(
+                    $this->fallbackDirs,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+        if (!isset($this->prefixes[$prefix])) {
+            $this->prefixes[$prefix] = (array) $paths;
 
             return;
         }
-        if (isset($this->prefixes[$prefix])) {
+        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) $paths;
+
+            return;
+        }
+        $this->prefixes[$prefix] = (array) $paths;
+    }
+
     /**
      * Turns on searching the include path for class files.
      *