From 7cb5f3f08f044ae5049896a9b3902f8855529299 Mon Sep 17 00:00:00 2001 From: Brendan Anderson Date: Thu, 15 Dec 2016 13:23:46 -0500 Subject: [PATCH] Prevent redundant autoloader registerations. Fixes #304 --- src/Mustache/Autoloader.php | 16 +++++++++++++++- test/Mustache/Test/AutoloaderTest.php | 17 +++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Mustache/Autoloader.php b/src/Mustache/Autoloader.php index b16ac14..5cb2a45 100644 --- a/src/Mustache/Autoloader.php +++ b/src/Mustache/Autoloader.php @@ -16,6 +16,14 @@ class Mustache_Autoloader { private $baseDir; + /** + * An array where the key is the baseDir and the key is an instance of this + * class. + * + * @var array + */ + static private $instances; + /** * Autoloader constructor. * @@ -45,7 +53,13 @@ class Mustache_Autoloader */ public static function register($baseDir = null) { - $loader = new self($baseDir); + $key = $baseDir ? $baseDir : 0; + + if (!isset(self::$instances[$key])) { + self::$instances[$key] = new self($baseDir); + } + + $loader = self::$instances[$key]; spl_autoload_register(array($loader, 'autoload')); return $loader; diff --git a/test/Mustache/Test/AutoloaderTest.php b/test/Mustache/Test/AutoloaderTest.php index 40af5ee..dfe6638 100644 --- a/test/Mustache/Test/AutoloaderTest.php +++ b/test/Mustache/Test/AutoloaderTest.php @@ -33,4 +33,21 @@ class Mustache_Test_AutoloaderTest extends PHPUnit_Framework_TestCase $loader->autoload('\Mustache_Bar'); $this->assertTrue(class_exists('Mustache_Bar')); } + + /** + * Test that the autoloader won't register multiple times. + * + * @return void + */ + public function testRegisterMultiple() + { + $numLoaders = count(spl_autoload_functions()); + + Mustache_Autoloader::register(); + Mustache_Autoloader::register(); + + $expectedNumLoaders = $numLoaders + 1; + + $this->assertCount($expectedNumLoaders, spl_autoload_functions()); + } }