From ca969fe663ebc8a702b6706718ed4ea94379799a Mon Sep 17 00:00:00 2001 From: Uwe Tews Date: Thu, 6 Aug 2015 00:59:06 +0200 Subject: [PATCH] fix autoloader optimization --- libs/Autoloader.php | 50 ++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/libs/Autoloader.php b/libs/Autoloader.php index 7301ee2f..f1912e35 100644 --- a/libs/Autoloader.php +++ b/libs/Autoloader.php @@ -33,13 +33,6 @@ class Smarty_Autoloader */ public static $SMARTY_SYSPLUGINS_DIR = ''; - /** - * Array of not existing classes to avoid is_file calls for already tested classes - * - * @var array - */ - public static $unknown = array(); - /** * Array with Smarty core classes and their filename * @@ -52,14 +45,9 @@ class Smarty_Autoloader * * @var array */ - private static $classes = array('smarty_config_source' => true, 'smarty_security' => true, - 'smarty_cacheresource' => true, 'smarty_compiledresource' => true, - 'smarty_template_config' => true, 'smarty_internal_data' => true, - 'smarty_internal_extension_config' => true, - 'smarty_internal_extension_loadplugin' => true, - 'smarty_internal_extension_append' => true, - 'smarty_internal_filter_handler' => true, - 'smarty_internal_function_call_handler' => true,); + private static $classes = array('smarty_config_source' => true, 'smarty_security' => true, + 'smarty_cacheresource' => true, 'smarty_compiledresource' => true, + 'smarty_template_config' => true,); /** * Registers Smarty_Autoloader backward compatible to older installations. @@ -74,7 +62,9 @@ class Smarty_Autoloader if (!defined('SMARTY_SPL_AUTOLOAD')) { define('SMARTY_SPL_AUTOLOAD', 0); } - if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) { + if (SMARTY_SPL_AUTOLOAD && + set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false + ) { $registeredAutoLoadFunctions = spl_autoload_functions(); if (!isset($registeredAutoLoadFunctions['spl_autoload'])) { spl_autoload_register(); @@ -92,7 +82,8 @@ class Smarty_Autoloader public static function register($prepend = false) { self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR; - self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR; + self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : self::$SMARTY_DIR . + 'sysplugins' . DIRECTORY_SEPARATOR; if (version_compare(phpversion(), '5.3.0', '>=')) { spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); } else { @@ -110,22 +101,31 @@ class Smarty_Autoloader */ public static function autoload($class) { - // Request for Smarty or already unknown class - if (isset(self::$unknown[$class])) { - return; - } $_class = strtolower($class); - if (isset(self::$classes[$_class])) { - $file = self::$classes[$_class] === true ? self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php' : self::$classes[$_class]; - require_once $file; + if (0 !== strpos($_class, 'smarty')) { return; } $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php'; + if (0 === strpos($_class, 'smarty_internal')) { + if (0 === strpos($_class, 'smarty_internal_compile')) { + if (is_file($file)) { + require_once $file; + return; + } + } else { + @include $file; + return; + } + } + if (isset(self::$classes[$_class])) { + $file = self::$classes[$_class] === true ? $file : self::$classes[$_class]; + require_once $file; + return; + } if (is_file($file)) { require_once $file; return; } - self::$unknown[$class] = true; return; } }