Index: library/Zend/Loader/Autoloader.php
===================================================================
--- library/Zend/Loader/Autoloader.php	(revision 19083)
+++ library/Zend/Loader/Autoloader.php	(working copy)
@@ -120,16 +120,10 @@
                 if ($autoloader->autoload($class)) {
                     return true;
                 }
-            } elseif (is_string($autoloader)) {
-                if ($autoloader($class)) {
+            } elseif (is_callable($autoloader)) {
+                if (call_user_func($autoloader, $class)) {
                     return true;
                 }
-            } elseif (is_array($autoloader)) {
-                $object = array_shift($autoloader);
-                $method = array_shift($autoloader);
-                if (call_user_func(array($object, $method), $class)) {
-                    return true;
-                }
             }
         }
 
@@ -166,15 +160,36 @@
      * Set several autoloader callbacks at once
      *
      * @param  array $autoloaders Array of PHP callbacks (or Zend_Loader_Autoloader_Interface implementations) to act as autoloaders
+     * @param  bool  $validate    Ensure each element is valid
      * @return Zend_Loader_Autoloader
      */
-    public function setAutoloaders(array $autoloaders)
+    public function setAutoloaders(array $autoloaders, $validate = true)
     {
+        if ($validate) {
+            foreach ($autoloaders as $autoloader) {
+                $this->_validateCallback($autoloader);
+            }
+        }
         $this->_autoloaders = $autoloaders;
         return $this;
     }
 
     /**
+     * Tests if $callback is a valid callback or an instance of
+     * Zend_Loader_Autoloader_Interface
+     *
+     * @param mixed $callback            Callback to validate
+     * @throws Zend_Loader_Exception     If $callback is invalid
+     */
+    protected function _validateCallback($callback)
+    {
+        if (!is_callable($callback, true) && !($callback instanceof Zend_Loader_Autoloader_Interface)) {
+            throw new Zend_Loader_Exception('Argument must be a valid callback or
+                an instance of Zend_Loader_Autoloader_Interface');
+        }
+    }
+
+    /**
      * Get attached autoloader implementations
      *
      * @return array
@@ -372,9 +387,10 @@
      */
     public function unshiftAutoloader($callback, $namespace = '')
     {
+        $this->_validateCallback($callback);
         $autoloaders = $this->getAutoloaders();
         array_unshift($autoloaders, $callback);
-        $this->setAutoloaders($autoloaders);
+        $this->setAutoloaders($autoloaders, false);
 
         $namespace = (array) $namespace;
         foreach ($namespace as $ns) {
@@ -395,9 +411,10 @@
      */
     public function pushAutoloader($callback, $namespace = '')
     {
+        $this->_validateCallback($callback);
         $autoloaders = $this->getAutoloaders();
         array_push($autoloaders, $callback);
-        $this->setAutoloaders($autoloaders);
+        $this->setAutoloaders($autoloaders, false);
 
         $namespace = (array) $namespace;
         foreach ($namespace as $ns) {
@@ -422,7 +439,7 @@
             $autoloaders = $this->getAutoloaders();
             if (false !== ($index = array_search($callback, $autoloaders, true))) {
                 unset($autoloaders[$index]);
-                $this->setAutoloaders($autoloaders);
+                $this->setAutoloaders($autoloaders, false);
             }
 
             foreach ($this->_namespaceAutoloaders as $ns => $autoloaders) {

