Пример #1
0
/**
 * 2016-07-01
 * The method returns a package's information from its composer.json file.
 * The method can be used not only for the custom packages,
 * but for the standard Magento packages too.
 * «How is @see \Magento\Framework\Composer\ComposerInformation::getInstalledMagentoPackages()
 * implemented and used?» https://mage2.pro/t/1796
 * @param string $name
 * @return CP|P|IP|null
 */
function df_package($name)
{
    /** @var array(string => P|IP) $packages */
    static $packages;
    if (!isset($packages[$name])) {
        /**
         * 2016-07-05
         * Раньше алгоритм был таким: df_composer_repository_l()->findPackage($name, '*')
         * Однако устаревшие версии Composer
         * (например, 1.0.0-alpha10, которая используется в Magento 2.0.0)
         * не поддерживают синтаксис со звёздочкой.
         * Поэтому нашёл другой путь, причём он даже более простой.
         */
        /** @var CP|P|IP|null $result */
        $result = null;
        foreach (df_composer_repository_l()->getPackages() as $package) {
            /** @var CP|P|IP $package */
            if ($name === $package->getName()) {
                $result = $package;
                break;
            }
        }
        $packages[$name] = df_n_set($result);
    }
    return df_n_get($packages[$name]);
}
Пример #2
0
 /**
  * @used-by df_preg_match()
  * @used-by df_preg_match_int()
  * Возвращает:
  * 1) string, если текст соответствует регулярному выражению
  * 2) string[], если текст соответствует регулярному выражению,
  * и регулярное выражение содержит несколько пар круглых скобок.
  * 3) null, если текст не соответствует регулярному выражению
  * 4) false, если при соответствии произошёл внутренний сбой функции @see preg_match()
  * @throws \Exception
  * @return string|string[]|null|bool
  */
 public function match()
 {
     if (!isset($this->{__METHOD__})) {
         /** @var string|null|bool $result */
         /** @var int|bool $matchResult */
         /** @var string[] $matches */
         // Собачка нужна, чтобы подавить warning.
         $matchResult = @preg_match($this->getPattern(), $this->getSubject(), $matches);
         if (false !== $matchResult) {
             if (1 === $matchResult) {
                 /**
                  * Раньше тут стояло:
                  * $result = dfa($matchResult, 1);
                  * что не совсем правильно,
                  * потому что если регулярное выражение не содержит круглые скобки,
                  * то результирующий массив будет содержать всего один элемент.
                  * ПРИМЕР
                  * регулярное выражение: #[А-Яа-яЁё]#mu
                  * исходный текст: Категория Яндекс.Маркета
                  * результат: Array([0] => К)
                  *
                  * 2015-03-23
                  * Добавил поддержку нескольких пар круглых скобок.
                  */
                 $result = count($matches) < 3 ? df_last($matches) : df_tail($matches);
             } else {
                 if (!$this->needThrowOnNotMatch()) {
                     $result = null;
                 } else {
                     $this->throwNotMatch();
                 }
             }
         } else {
             if ($this->needThrowOnError()) {
                 $this->throwInternalError();
             } else {
                 $result = false;
             }
         }
         $this->{__METHOD__} = df_n_set($result);
     }
     return df_n_get($this->{__METHOD__});
 }
Пример #3
0
 /**
  * 2016-07-31
  * Без проверки на closure будет сбой:
  * «Function Df\Config\{closure}() does not exist».
  * @return RFA|RF|RM|null
  */
 private function functionA()
 {
     if (!isset($this->{__METHOD__})) {
         $this->{__METHOD__} = df_n_set($this->method() ?: ($this->functionName() && !$this->isClosure() ? new RF($this->functionName()) : null));
     }
     return df_n_get($this->{__METHOD__});
 }
Пример #4
0
 /**
  * 2016-07-18
  * @param string|null $key [optional]
  * @return Response|string|null
  */
 private function response($key = null)
 {
     /** @var string $f */
     $f = dfa(['L' => 'df_last', 'F' => 'df_first'], substr(df_caller_f(), -1));
     if (!isset($this->{__METHOD__}[$f])) {
         $this->{__METHOD__}[$f] = df_n_set(call_user_func($f, $this->responses()));
     }
     /** @var Response|null $r */
     $r = df_n_get($this->{__METHOD__}[$f]);
     return !$r || is_null($key) ? $r : $r[$key];
 }
Пример #5
0
 /**
  * @param string $name
  * @return string|int|array|float|null
  */
 private function getAttributeInternal($name)
 {
     if (!isset($this->{__METHOD__}[$name])) {
         $this->{__METHOD__}[$name] = df_n_set($this->e()->getAttribute($name));
     }
     return df_n_get($this->{__METHOD__}[$name]);
 }