]> git.joonet.de Git - adminer.git/commitdiff
Improve work with references
authorJakub Vrana <jakub@vrana.cz>
Mon, 14 Feb 2011 11:08:36 +0000 (12:08 +0100)
committerJakub Vrana <jakub@vrana.cz>
Tue, 15 Feb 2011 18:42:21 +0000 (19:42 +0100)
plugins/plugin.php

index 5e83cd81806f2d20f7b7a1f7015e3bb1f3415d02..914885ede93876d3f530e3aaa5cb5f2b3e4817b9 100644 (file)
@@ -19,10 +19,14 @@ class AdminerPlugin extends Adminer {
        function _applyPlugin($function, $args) {
                foreach ($this->plugins as $plugin) {
                        if (method_exists($plugin, $function)) {
-                               foreach ($args as $key => $val) {
-                                       $args[$key] = &$args[$key]; // allows modification of parameters
+                               switch (count($args)) { // call_user_func_array() doesn't work well with references
+                                       case 0: $return = $plugin->$function(); break;
+                                       case 1: $return = $plugin->$function($args[0]); break;
+                                       case 2: $return = $plugin->$function($args[0], $args[1]); break;
+                                       case 3: $return = $plugin->$function($args[0], $args[1], $args[2]); break;
+                                       case 4: $return = $plugin->$function($args[0], $args[1], $args[2], $args[3]); break;
+                                       default: trigger_error('Too many parameters.', E_USER_WARNING);
                                }
-                               $return = call_user_func_array(array($plugin, $function), $args);
                                if (isset($return)) {
                                        return $return;
                                }