Esempio n. 1
0
 /**
  * @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));
 }
Esempio n. 2
0
 /**
  * 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);
 }