Cache result of class_exists() in Services_JSON to avoid envoking AutoLoader in a loop when the class is not present

This commit is contained in:
Max Semenik 2009-10-25 17:46:06 +00:00
parent 529bd41709
commit 1e5d7e0c90

View file

@ -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' ||