/** @return bool */ private function isSubjectMultiline() { if (!isset($this->{__METHOD__})) { $this->{__METHOD__} = df_t()->isMultiline($this->getSubject()); } return $this->{__METHOD__}; }
/** * 2015-02-18 * По смыслу функция @see df_extend() аналогична методу @see \Magento\Framework\Simplexml\Element::extend() * и предназначена для слияния настроечных опций, * только, в отличие от @see \Magento\Framework\Simplexml\Element::extend(), * @see df_extend() сливает не XML, а ассоциативные массивы. * * Обратите внимание, что вместо @see df_extend() нельзя использовать ни * @see array_replace_recursive(), ни @see array_merge_recursive(), * ни тем более @see array_replace() и @see array_merge() * Нерекурсивные аналоги отметаются сразу, потому что не способны сливать вложенные структуры. * Но и стандартные рекурсивные функции тоже не подходят: * * 1) * array_merge_recursive(array('width' => 180), array('width' => 200)) * вернёт: array(array('width' => array(180, 200))) * http://php.net/manual/function.array-merge-recursive.php * Наша функция df_extend(array('width' => 180), array('width' => 200)) * вернёт array('width' => 200) * * 2) * array_replace_recursive(array('x' => array('A', 'B')), array('x' => 'C')) * вернёт: array('x' => array('С', 'B')) * http://php.net/manual/function.array-replace-recursive.php * Наша функция df_extend(array('x' => array('A', 'B')), array('x' => 'C')) * вернёт array('x' => 'C') * * @param array(string => mixed) $defaults * @param array(string => mixed) $newValues * @return array(string => mixed) */ function df_extend(array $defaults, array $newValues) { /** @var array(string => mixed) $result */ // Здесь ошибочно было бы $result = [], // потому что если ключ отсутствует в $newValues, // то тогда он не попадёт в $result. $result = $defaults; foreach ($newValues as $key => $newValue) { /** @var int|string $key */ /** @var mixed $newValue */ /** @var mixed $defaultValue */ $defaultValue = dfa($defaults, $key); if (!is_array($defaultValue)) { // 2016-08-23 // unset добавил сегодня. if (is_null($newValue)) { unset($result[$key]); } else { $result[$key] = $newValue; } } else { if (is_array($newValue)) { $result[$key] = df_extend($defaultValue, $newValue); } else { if (is_null($newValue)) { unset($result[$key]); } else { // Если значение по умолчанию является массивом, // а новое значение не является массивом, // то это наверняка говорит об ошибке программиста. df_error("df_extend: значением по умолчанию ключа «{$key}» является массив {defaultValue}," . "\nоднако программист ошибочно пытается заместить его" . ' значением {newValue} типа «{newType}», что недопустимо:' . "\nзамещаемое значение для массива должно быть либо массивом, либо «null».", ['{defaultValue}' => df_t()->singleLine(df_dump($defaultValue)), '{newType}' => gettype($newValue), '{newValue}' => df_dump($newValue)]); } } } } return $result; }
/** * @see df_xml_prettify() * @param string $value * @return string */ function df_json_prettify($value) { return Zend_Json::prettyPrint(df_t()->adjustCyrillicInJson($value)); }
/** * Обратите внимание, что иногда вместо данной функции надо применять @see trim(). * Например, @see df_trim() не умеет отсекать нулевые байты, * которые могут образовываться на конце строки * в результате шифрации, передачи по сети прямо в двоичном формате, и затем обратной дешифрации * посредством @see Varien_Crypt_Mcrypt. * @see Df_Core_Model_RemoteControl_Coder::decode() * @see Df_Core_Model_RemoteControl_Coder::encode() * @param string|string[] $s * @param string $charlist [optional] * @return string|string[] */ function df_trim($s, $charlist = null) { return df_t()->trim($s, $charlist); }
/** * @param int $days * @return string */ function df_day_noun($days) { /** @var string[] $forms */ static $forms = ['день', 'дня', 'дней']; return df_t()->getNounForm($days, $forms); }
/** * 2016-08-31 * @return string */ private function _p() { /** @var string $result */ /** * Обратите внимание, что метод ядра Magento CE * @see \Magento\Framework\Simplexml\Element::asNiceXml() * не сохраняет в документе XML блоки CDATA, * а вместо этого заменяет недопустимые для XML символы их допустимыми кодами, * например: & => & * * Также @see \Magento\Framework\Simplexml\Element::asNiceXml() * не добавляет к документу заголовок XML: его надо добавить вручную. * * 2015-02-27 * Обратите внимание, что для конвертации объекта класса @see SimpleXMLElement в строку * надо использовать именно метод @uses SimpleXMLElement::asXML(), * а не @see SimpleXMLElement::__toString() или оператор (string)$this. * * @see SimpleXMLElement::__toString() и (string)$this * возвращают непустую строку только для концевых узлов (листьев дерева XML). * Пример: <?xml version='1.0' encoding='utf-8'?> <menu> <product> <cms> <class>aaa</class> <weight>1</weight> </cms> <test> <class>bbb</class> <weight>2</weight> </test> </product> </menu> * Здесь для $e1 = $xml->{'product'}->{'cms'}->{'class'} * мы можем использовать $e1->__toString() и (string)$e1. * http://3v4l.org/rAq3F * Однако для $e2 = $xml->{'product'}->{'cms'} * мы не можем использовать $e2->__toString() и (string)$e2, * потому что узел «cms» не является концевым узлом (листом дерева XML). * http://3v4l.org/Pkj37 * Более того, метод @see SimpleXMLElement::__toString() * отсутствует в PHP версий 5.2.17 и ниже: * http://3v4l.org/Wiia2#v500 */ /** @var string $header */ $header = $this[self::P__SKIP_HEADER] ? '' : df_xml_header($this[self::P__1251] ? 'Windows-1251' : 'UTF-8'); /** @var X $x */ $x = df_xml_parse(df_cc_n($header, $this[self::P__DOC_TYPE], sprintf('<%s/>', $this[self::$P__TAG]))); $x->addAttributes($this[self::P__ATTRIBUTES]); $x->importArray($this[self::$P__CONTENTS], $this[self::P__WRAP_IN_CDATA]); /** @var bool $pretty */ $pretty = $this[self::P__PRETTY]; $result = $this[self::P__SKIP_HEADER] ? $x->asXMLPart() : ($pretty || $this[self::P__1251] ? df_cc_n($header, $pretty ? $x->asNiceXml() : $x->asXMLPart()) : $x->asXML()); // Убеждаемся, что asXML вернуло строку, а не false. df_assert_ne(false, $result); /** * Символ 0xB (вертикальная табуляция) допустим в UTF-8, но недопустим в XML: * http://stackoverflow.com/a/10095901 */ $result = str_replace("\v", "", $result); if ($this[self::P__1251]) { $result = df_1251_to($result); } if ($this[self::P__REMOVE_LINE_BREAKS]) { $result = df_t()->removeLineBreaks($result); } if ($this[self::P__DECODE_ENTITIES]) { $result = html_entity_decode($result, ENT_NOQUOTES, 'UTF-8'); } return $result; }