/** * @param string|array(object, string) $method * @param string|string[]|null $params [optional] * @return string */ public function makeKey($method, $params = null) { /** * Иногда первым параметром вместо __METHOD__ передаётся array($this, __FUNCTION__). * Это позволяет сохранить уникальность ключа, * когда вызов makeKey() производится в родительском классе. * Ведь в таком случае __METHOD__ не будет уникальным значением, * ибо будет содержать имя родительского класса, а не класса-потомка. * А вот значение implode('::', array(get_class($this), __FUNCTION__)) останется уникальным, * ибо будет содержать название класса-потомка, а не родителя. */ if (is_array($method)) { $method = df_cc_method($method[0], $method[1]); } /** @var string[] $keyParts */ $keyParts = []; if ($this->type()) { $keyParts[] = $this->type(); } $keyParts[] = $method; $keyParts[] = df_store()->getCode(); if ($params) { if (is_array($params)) { ksort($params); $params = http_build_query($params); } $keyParts[] = $params; } /** * Обратите внимание, * что ключ кэширования не должен содержать русские буквы и некоторые другие символы, * потому что когда кэш хранится в файлах, * то русские буквы и недопустимые символы будут заменены на символ «_», * и имя файла будет выглядеть как «mage---b26_DF_LOCALIZATION_MODEL_MORPHER________». * Чтобы избавиться от русских букв и других недопустимых символов * при сохранении уникальности ключа, используем функцию @uses md5(). */ return md5(df_ckey($keyParts)); }
/** * 2015-08-16 * @used-by leafB() * @used-by leafF() * @used-by leafI() * @used-by leafSne() * @param string $name * @param string|null|callable $default [optional] * @param string $function [optional] * @return string|null */ public function leaf($name, $default = null, $function = 'df_leaf') { /** @var string $key */ $key = df_ckey($name, $function); if (!isset($this->{__METHOD__}[$key])) { $this->{__METHOD__}[$key] = df_n_set(call_user_func($function, $this->e()->{$name})); } /** @var string|null $result */ $result = df_n_get($this->{__METHOD__}[$key]); return df_if1(is_null($result), $default, $result); }