Beispiel #1
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__});
 }
Beispiel #2
0
 /**
  * @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;
 }
Beispiel #3
0
/**
* 2015-03-04
* Эта функция проверяет, принадлежит ли переменная $variable хотя бы к одному из классов $class.
* Обратите внимание, что т.к. алгоритм функции использует стандартный оператор instanceof,
* то переменная $variable может быть не только объектом,
* а иметь произвольный тип: http://php.net/manual/language.operators.type.php#example-146
* Если $variable не является объектом, то функция просто вернёт false.
*
* Наша функция не загружает при этом $class в память интерпретатора PHP.
* Если $class ещё не загружен в память интерпретатора PHP, то функция вернёт false.
* В принципе, это весьма логично!
* Если проверяемый класс ещё не был загружен в память интерпретатора PHP,
* то проверяемая переменная $variable гарантированно не может принадлежать данному классу!
* http://3v4l.org/KguI5
* Наша функция отличается по сфере применения
* как от оператора instanceof, так и от функции @see is_a() тем, что:
* 1) Умеет проводить проверку на приналежность не только одному конкретному классу,
* а и хотя бы одному из нескольких.
* 2) @is_a() приводит к предупреждению уровня E_DEPRECATED интерпретатора PHP версий ниже 5.3:
* http://php.net/manual/function.is-a.php
* 3) Даже при проверке на принаджежность одному классу код с @see df_is() получается короче,
* чем при применении instanceof в том случае, когда мы не уверены, существует ли класс
* и загружен ли уже класс интерпретатором PHP.
* Например, нам приходилось писать так:
		class_exists('Df_1C_Cml2Controller', $autoload = false)
	&&
		df_state()->getController() instanceof Df_1C_Cml2Controller
* Или так:
		$controllerClass = 'Df_1C_Cml2Controller';
		$result = df_state()->getController() instanceof $controllerClass;
* При этом нельзя писать
		df_state()->getController() instanceof 'Df_1C_Cml2Controller'
* потому что правый операнд instanceof может быть строковой переменной,
* но не может быть просто строкой!
* http://php.net/manual/en/language.operators.type.php#example-148
* @param mixed $variable
* @param string|string[] $class
* @return bool
* @used-by Df_1C_Observer::df_catalog__attribute_set__group_added()
*/
function df_is($variable, $class)
{
    /** @var bool $result */
    if (2 < func_num_args()) {
        /** @var mixed[] $arguments */
        $arguments = func_get_args();
        /** @var string[] $classes */
        $class = df_tail($arguments);
    }
    if (!is_array($class)) {
        $result = $variable instanceof $class;
    } else {
        $result = false;
        foreach ($class as $classItem) {
            /** @var string $classItem */
            if ($variable instanceof $classItem) {
                $result = true;
                break;
            }
        }
    }
    return $result;
}
Beispiel #4
0
/**
 * 2016-08-08
 * @used-by \Df\Payment\Charge::iia()
 * @used-by \Df\Payment\Method::iia()
 * @param II|OP|QP $payment
 * @param string|string[]|null $keys  [optional]
 * @return mixed|array(string => mixed)
 */
function dfp_iia(II $payment, $keys = null)
{
    /** @var mixed|array(string => mixed) $result */
    if (is_null($keys)) {
        $result = $payment->getAdditionalInformation();
    } else {
        if (!is_array($keys)) {
            $keys = df_tail(func_get_args());
        }
        $result = 1 === count($keys) ? $payment->getAdditionalInformation(df_first($keys)) : dfa_select_ordered($payment->getAdditionalInformation(), $keys);
    }
    return $result;
}
Beispiel #5
0
/**
* В настоящее время эта фукция не успользуется и осталасть только ради информации.
* 2015-03-03
* Раньше алгоритм был таким:
	 strtr($s, array_fill_keys($wordsToRemove, ''))
* Он корректен, но новый алгоритм быстрее, потому что не требует вызова нестандартных функций.
* http://php.net/str_replace
* «If replace has fewer values than search,
* then an empty string is used for the rest of replacement values.»
* http://3v4l.org/9qvC4
* @param string $s
* @param string|string[] $wordsToRemove
* @return string
*/
function df_string_clean($s, $wordsToRemove)
{
    if (!is_array($wordsToRemove)) {
        $wordsToRemove = df_tail(func_get_args());
    }
    return str_replace($wordsToRemove, null, $s);
}