diff --git a/e107_handlers/e107_class.php b/e107_handlers/e107_class.php index b0b55f97f..22d83888c 100644 --- a/e107_handlers/e107_class.php +++ b/e107_handlers/e107_class.php @@ -6164,67 +6164,79 @@ class e107 */ public function __get($name) { - switch ($name) + + // Use a static cache to store instances + static $instances = []; + + if(isset($instances[$name])) + { + return $instances[$name]; + } + + switch($name) { case 'tp': $ret = self::getParser(); - break; + break; case 'sql': $ret = self::getDb(); - break; + break; case 'ecache': $ret = self::getCache(); - break; + break; case 'arrayStorage': $ret = self::getArrayStorage(); - break; + break; case 'e_event': $ret = self::getEvent(); - break; + break; case 'ns': $ret = self::getRender(); - break; + break; case 'url': $ret = self::getUrl(); - break; + break; case 'admin_log': $ret = self::getLog(); - break; + break; case 'override': - $ret = self::getSingleton('override', e_HANDLER.'override_class.php'); - break; + $ret = self::getSingleton('override', e_HANDLER . 'override_class.php'); + break; case 'notify': $ret = self::getNotify(); - break; + break; case 'e_online': $ret = self::getOnline(); - break; + break; case 'eIPHandler': $ret = self::getIPHandler(); break; - + case 'user_class': $ret = self::getUserClass(); - break; + break; default: - trigger_error('$e107->$'.$name.' not defined', E_USER_WARNING); + trigger_error('$e107->$' . $name . ' not defined', E_USER_WARNING); + return null; - break; + break; } - $this->$name = $ret; + // Store the result in the static cache + $instances[$name] = $ret; + return $ret; } diff --git a/e107_tests/tests/unit/ArrayDataTest.php b/e107_tests/tests/unit/ArrayDataTest.php index d86f080c8..868ab7029 100644 --- a/e107_tests/tests/unit/ArrayDataTest.php +++ b/e107_tests/tests/unit/ArrayDataTest.php @@ -17,7 +17,7 @@ catch(Exception $e) { - $this->assertTrue(false, $e->getMessage()); + $this::fail($e->getMessage()); } } @@ -39,13 +39,13 @@ 'most_enabled' => true ); - $result = $this->ad->ReadArray($string); - $this->assertSame($expected, $result); + $result = e107::unserialize($string); + $this::assertSame($expected, $result); // legacy Prefs test. $string = 'a:4:{s:19:"most_members_online";i:10;s:18:"most_guests_online";i:20;s:21:"most_online_datestamp";i:1534279911;s:12:"most_enabled";b:1;}'; - $actual = $this->ad->ReadArray($string); - $this->assertSame($expected, $actual); + $actual = e107::unserialize($string); + $this::assertSame($expected, $actual); } @@ -54,12 +54,12 @@ { // Test with addslashes enabled. $input = array('one'=>'two', 'three'=>true); - $result = $this->ad->WriteArray($input); + $result = e107::serialize($input,true); $expected = 'array ( \\\'one\\\' => \\\'two\\\', \\\'three\\\' => true, )'; - $this->assertSame($expected, $result); + $this::assertSame($expected, $result); // Test with addslashes disabled.