/** * 2015-04-05 * @used-by \Df\Core\Exception_InvalidObjectProperty::__construct() * @used-by Df_Core_Validator::check() * @param mixed $value * @param bool $addQuotes [optional] * @return string */ function df_debug_type($value, $addQuotes = true) { /** @var string $result */ if (is_object($value)) { $result = 'объект класса ' . get_class($value); } else { if (is_array($value)) { $result = sprintf('массив с %d элементами', count($value)); } else { if (is_null($value)) { $result = 'NULL'; } else { $result = sprintf('%s (%s)', df_string($value), gettype($value)); } } } return !$addQuotes ? $result : df_quote_russian($result); }
/** * @param string|null $key * @param mixed $value * @param string[]|bool $wrapInCData [optional] * @return X */ private function importString($key, $value, $wrapInCData = []) { /** @var bool $wrapInCDataAll */ $wrapInCDataAll = is_array($wrapInCData) ? false : !!$wrapInCData; $wrapInCData = df_nta($wrapInCData); /** * null означает, что метод importString * не должен создавать дочерний тэг $key, * а должен добавить текст * в качестве единственного содержимого текущего тэга */ if (!is_null($key)) { df_param_string($key, 0); } /** @var string $keyAsString */ $keyAsString = is_null($key) ? $this->getName() : $key; /** * @var bool $valueIsString */ $valueIsString = is_string($value); /** @var string $valueAsString */ $valueAsString = null; try { $valueAsString = $valueIsString ? $value : df_string($value); } catch (E $e) { df_error("Не могу сконвертировать значение ключа «%s» в строку.\n%s", $keyAsString, df_ets($e)); } /** @var bool $needWrapInCData */ $needWrapInCData = $wrapInCDataAll; if ($valueIsString && $valueAsString) { /** * Поддержка синтаксиса array( 'Представление' => df_cdata( $this->getAddress()->format( Mage_Customer_Model_Attribute_Data::OUTPUT_FORMAT_TEXT ) ) ) * Обратите внимание, что проверка на синтаксис[[]] должна предшествовать * проверке на принадлежность ключа $keyAsString в массиве $wrapInCData, * потому что при соответствии синтаксису[[]] нам надо удалить из значения символы[[]]. * Обратите внимание, что нам нужно выполнить проверку на синтаксис df_cdata ([[]]) * даже при $wrapInCDataAll = true, потому что маркеры [[ и ]] из данных надо удалять. */ /** * Перед вызовом медленной функции @see preg_match * выполняем более быструю и простую проверку @see df_contains */ if (df_contains($valueAsString, '[[') && df_contains($valueAsString, ']]')) { /** @var string $pattern */ $pattern = "#\\[\\[([\\s\\S]*)\\]\\]#mu"; /** @var string[] $matches */ $matches = []; if (1 === preg_match($pattern, $valueAsString, $matches)) { $valueAsString = $matches[1]; $needWrapInCData = true; } } $needWrapInCData = $needWrapInCData || in_array($keyAsString, $wrapInCData); } /** @var X $result */ $result = $needWrapInCData ? is_null($key) ? $this->setCData($valueAsString) : $this->addChildText($keyAsString, $valueAsString) : (is_null($key) ? $this->setValue($valueAsString) : $this->addChild($keyAsString, $valueAsString)); df_assert($result instanceof X); return $result; }