From 1e5d7e0c90fef646fa7cb0ec06e4c1f86f192fd6 Mon Sep 17 00:00:00 2001 From: Max Semenik Date: Sun, 25 Oct 2009 17:46:06 +0000 Subject: [PATCH] Cache result of class_exists() in Services_JSON to avoid envoking AutoLoader in a loop when the class is not present --- includes/json/Services_JSON.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/includes/json/Services_JSON.php b/includes/json/Services_JSON.php index 4ec76e6c0d..23bf884ff3 100644 --- a/includes/json/Services_JSON.php +++ b/includes/json/Services_JSON.php @@ -135,6 +135,19 @@ class Services_JSON { $this->use = $use; } + + private static $mHavePear = NULL; + /** + * Returns cached result of class_exists('pear'), to avoid calling AutoLoader numerous times + * in cases when PEAR is not present. + * @return boolean + */ + private static function pearInstalled() { + if ( self::$mHavePear === NULL ) { + self::$mHavePear = class_exists( 'pear' ); + } + return self::$mHavePear; + } /** * convert a string from one UTF-16 char to one UTF-8 char @@ -815,7 +828,7 @@ class Services_JSON */ function isError($data, $code = null) { - if (class_exists('pear')) { + if ( self::pearInstalled() ) { //avoid some strict warnings on PEAR isError check (looks like http://pear.php.net/bugs/bug.php?id=9950 has been around for some time) return @PEAR::isError($data, $code); } elseif (is_object($data) && (get_class($data) == 'services_json_error' || -- 2.20.1