рдХреИрд╢ рдореЙрдбрд▓

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдбреЗрдЯрд╛ рдХреИрд╢рд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдПрдХ рдХрд╛рд░реНрдп рдмрди рдЧрдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрд╛рдд рд╣реИред рд╣реИрдмрд░рдХрдЯ рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВ ...

рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рд╛рд░ рд╡рд░реНрдЧ рдХреЛ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХреИрд╢ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ /Default/Models/Cache/Abstract.php рд╣реИ

abstract class Default_Models_Cache_Abstract { protected static $_cache; protected static $_staticCache; protected static $_tags = null; protected static $_className = null; protected static $_nonCachedMethods = array(); protected static $_frontendName; protected static $_backendName; protected static $_frontendOptions = array(); protected static $_backendOptions = array(); public function __construct() { static::$_cache = null; static::$_staticCache = null; static::_init(); } public function __call($name, $arguments) { return static::_call($name, $arguments); } public static function __callStatic($name, $arguments) { return static::_call($name, $arguments, true); } protected static function _call($name, $arguments, $useStatic = false) { static::_init($useStatic); $cache = $useStatic ? static::$_staticCache : static::$_cache; if (in_array($name, static::$_nonCachedMethods)) { return call_user_func_array(array($cache, $name), $arguments); } $id = $cache->makeId($name, $arguments); if (!($result = $cache->load($id))) { $result = $cache->__call($name, $arguments); $cache->save($result, $id, static::$_tags); } return $result; } protected static function _initConfig() { static $inited = null; if (null === $inited) { if (null === static::$_className) { throw new Exception("You must provide a <code>protected static" . " \$_className = ...;</code> statement in your class!"); } static::$_backendName = 'File'; static::$_frontendName = 'class'; static::$_frontendOptions = array(); static::$_backendOptions = array(); $inited = true; } } protected static function _init($useStatic = false) { $ref = null; if ($useStatic && null === static::$_staticCache) { $ref = static::$_className; } elseif (null === static::$_cache) { if (!class_exists(static::$_className)) { require_once 'Zend/Loader.php'; Zend_Loader::loadClass(static::$_className); } $ref = new static::$_className; } if (null !== $ref) { static::_initConfig(); static::$_tags = array(static::$_className); static::$_frontendOptions['cached_entity'] = $ref; if (!empty(static::$_nonCachedMethods)) { static::$_frontendOptions['non_cached_methods'] = is_array(static::$_nonCachedMethods) ? static::$_nonCachedMethods : array(static::$_nonCachedMethods); } $cache = Zend_Cache::factory( static::$_frontendName, static::$_backendName, static::$_frontendOptions, static::$_backendOptions ); if ($useStatic) { static::$_staticCache = $cache; } else { static::$_cache = $cache; } } } public function cleanCache() { $ids = static::$_cache->getIdsMatchingTags(); foreach($ids as $id) { static::$_cache->remove($id); } static::$_cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, static::$_tags); } } 

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдореЙрдбрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Default_Models_Productsред
рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдХреИрд╢ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рд╣рдо Default_Models_Cache_Products рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рдЧреБрдг $ _className рдФрд░ $ _nonCachedMethods рд╣реЛрддреЗ рд╣реИрдВ:
 class Default_Models_Cache_Products extends Default_Models_Cache_Abstract { protected static $_className = 'Default_Models_Products'; protected static $_nonCachedMethods = array('addProduct'); } 

$ _ClassName рдореЗрдВ, рдХреИрд╢реНрдб рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред $ _nonCachedMethods рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдореЗрдВ рд╣рдо рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╣рдо рд╕рднреА рдХреЙрд▓ Default_Models_Products рд╡рд░реНрдЧ рдХреЛ Default_Models_Cache_Products рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ, рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА Default_Models_Products рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдЧреЗрдЯрд▓рд┐рд╕реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
 class Default_Models_Products { ... public function getList() { ... return $list; } ... } 

рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 $productsModel = new Default_Models_Cache_Products(); $productList = $productsModel->getList(); 

рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рднреА рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЧреЗрдЯрд▓рд┐рд╕реНрдЯ рд╡рд┐рдзрд┐ рд╕реНрдерд┐рд░ рд╣реИ:
 class Default_Models_Products { ... public static function getList() { ... return $list; } ... } 

рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 $productList = Default_Models_Cache_Products::getList(); 

рдХреИрд╢ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд▓реАрдирдЪреИрдЪ () рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ; рдЬрдм рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдореЙрдбрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреИрд╢ рдХреЛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ $ _frontendOptions рдФрд░ $ _backendOptions рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ

рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧ рдмрд╣реБрдд рд╣реА рдмрд╣реБрдореБрдЦреА рд╣реИ рдФрд░ рди рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред

рдкреБрдирд╢реНрдЪ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рд╡рд┐рдХреНрдЯрд░ (рд╣рд╛рдБ) рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рд╡рд░реНрдЧ 5.3 рд╕реЗ рдХрдо php рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ ред рдЪреВрдВрдХрд┐ рдЬрд╛рджреВ рд╡рд┐рдзрд┐ __callStatic () php рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреАред

Source: https://habr.com/ru/post/In127418/


All Articles