Bläddra i källkod

Use reference to current stack frame

(saves quite a few array lookups)

See #218
Justin Hileman 11 år sedan
förälder
incheckning
df67052626
1 ändrade filer med 12 tillägg och 10 borttagningar
  1. 12 10
      src/Mustache/Context.php

+ 12 - 10
src/Mustache/Context.php

@@ -172,24 +172,26 @@ class Mustache_Context
     private function findVariableInStack($id, array $stack)
     {
         for ($i = count($stack) - 1; $i >= 0; $i--) {
-            switch (gettype($stack[$i])) {
+            $frame = &$stack[$i];
+
+            switch (gettype($frame)) {
                 case 'object':
-                    if (!($stack[$i] instanceof Closure)) {
+                    if (!($frame instanceof Closure)) {
                         // Note that is_callable() *will not work here*
                         // See https://github.com/bobthecow/mustache.php/wiki/Magic-Methods
-                        if (method_exists($stack[$i], $id)) {
-                            return $stack[$i]->$id();
-                        } elseif (isset($stack[$i]->$id)) {
-                            return $stack[$i]->$id;
-                        } elseif ($stack[$i] instanceof ArrayAccess && isset($stack[$i][$id])) {
-                            return $stack[$i][$id];
+                        if (method_exists($frame, $id)) {
+                            return $frame->$id();
+                        } elseif (isset($frame->$id)) {
+                            return $frame->$id;
+                        } elseif ($frame instanceof ArrayAccess && isset($frame[$id])) {
+                            return $frame[$id];
                         }
                     }
                     break;
 
                 case 'array':
-                    if (array_key_exists($id, $stack[$i])) {
-                        return $stack[$i][$id];
+                    if (array_key_exists($id, $frame)) {
+                        return $frame[$id];
                     }
                     break;
             }