Example #1
0
 /**
  * 2015-04-03
  * Для простых функций (не методов) вернёт название функции.
  * @used-by \Df\Qa\Method::raiseErrorParam()
  * @used-by \Df\Qa\Method::raiseErrorResult()
  * @used-by \Df\Qa\Method::raiseErrorVariable()
  * @return string
  */
 public function methodName()
 {
     if (!isset($this->{__METHOD__})) {
         $this->{__METHOD__} = df_cc_method($this->className(), $this->functionName());
     }
     return $this->{__METHOD__};
 }
Example #2
0
File: qa.php Project: mage2pro/core
/**
 * @param int $levelsToSkip
 * Позволяет при записи стека вызовов пропустить несколько последних вызовов функций,
 * которые и так очевидны (например, вызов данной функции, вызов df_bt() и т.п.)
 * @return void
 */
function df_bt($levelsToSkip = 0)
{
    /** @var array $bt */
    $bt = array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), $levelsToSkip);
    /** @var array $compactBT */
    $compactBT = [];
    /** @var int $traceLength */
    $traceLength = count($bt);
    /**
     * 2015-07-23
     * 1) Удаляем часть файлового пути до корневой папки Magento.
     * 2) Заменяем разделитель папок на унифицированный.
     */
    /** @var string $bp */
    $bp = BP . DS;
    /** @var bool $nonStandardDS */
    $nonStandardDS = DS !== '/';
    for ($traceIndex = 0; $traceIndex < $traceLength; $traceIndex++) {
        /** @var array $currentState */
        $currentState = dfa($bt, $traceIndex);
        /** @var array(string => string) $nextState */
        $nextState = dfa($bt, 1 + $traceIndex, []);
        /** @var string $file */
        $file = str_replace($bp, '', dfa($currentState, 'file'));
        if ($nonStandardDS) {
            $file = df_path_n($file);
        }
        $compactBT[] = ['File' => $file, 'Line' => dfa($currentState, 'line'), 'Caller' => !$nextState ? '' : df_cc_method($nextState), 'Callee' => !$currentState ? '' : df_cc_method($currentState)];
    }
    df_report('bt-{date}-{time}.log', print_r($compactBT, true));
}
Example #3
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));
 }
Example #4
0
File: O.php Project: mage2pro/core
 /**
  * @param string $class
  * @param string|string[] $functions
  * @return string[]
  */
 protected static function _m($class, $functions)
 {
     df_assert($functions);
     /** @var string[] $result */
     $result = [];
     if (!is_array($functions)) {
         $functions = df_tail(func_get_args());
     }
     foreach ($functions as $function) {
         /** @var string $function */
         $result[] = df_cc_method($class, $function);
     }
     return $result;
 }