/** * 2015-12-07 * Когда галка чекбокса установлена, то значением настроечного поля является пустая строка, * а когда галка не установлена — то ключ значения отсутствует. * 2015-12-21 * Всё чуточку изменилось... * @param mixed $value * @param bool|callable $default [optional] * @return bool */ public static function b($value, $default = false) { return df_if1(is_null($value), $default, '' === $value || df_bool($value)); }
/** * Этот метод отличается от методов @see getData(), @see offsetGet(), @see _getData() * возможностью указать значение по умолчанию. * @param string $key * @param mixed|callable $default [optional] * @return mixed */ public function cfg($key, $default = null) { /** @var mixed $result */ /** * 2015-03-26 * Раньше здесь стоял вызов @see getData() * Однако при новой реализации @see getData() * разумнее вызывать сразу @uses offsetGet(): * нам тогда не приходится обрабатывать ситуацию с пустым ключом $key: * при вызове @see cfg() ключ не может быть пустым. * * Обратите внимание, что вызывать @see _getData() здесь ошибочно, * потому что тогда могут не сработать валидаторы и фильтры. */ $result = $this->offsetGet($key); // Некоторые фильтры заменяют null на некоторое другое значение, // поэтому обязательно учитываем равенство null // значения свойства ДО применения фильтров. // // Раньше вместо !is_null($result) стояло !$result. // !is_null выглядит логичней. // // 2015-02-10 // Раньше код был таким: // $valueWasNullBeforeFilters = dfa($this->_valueWasNullBeforeFilters, $key, true); // return !is_null($result) && !$valueWasNullBeforeFilters ? $result : $default; // Изменил его ради ускорения. // Неожиданным результатом стала простота и понятность нового кода. return df_if1(null === $result || !isset($this->_valueWasNullBeforeFilters[$key]) || $this->_valueWasNullBeforeFilters[$key], $default, $result); }
/** * 2015-02-27 * Обратите внимание на разницу между @see \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 * * 2015-03-02 * Обратите внимание, * то мы специально допускаем возможность для первого параметра $e принимать значение null: * это даёт нам возможность писать код типа: * @used-by Df_Page_Helper_Head::needSkipAsStandardCss() df_leaf_b(df_config_node( 'df/page/skip_standard_css/', df_state()->getController()->getFullActionName() )) * без дополнительных проверок, имеется ли в наличии запрашиваемый лист дерева XML * (если лист отсутствует, то @see df_config_node() вернёт null) * * @param CX|null $e [optional] * @param string|null|callable $default [optional] * @return string|null */ function df_leaf(CX $e = null, $default = null) { /** @var string $result */ /** * 2015-08-04 * Нельзя здесь использовать !$e, * потому что для концевых текстовых узлов с ненулевым целым значением (например: «147») * такое выражение довольно-таки неожиданно возвращает true. * @see \SimpleXMLElement вообще необычный класс с нестандартным поведением. * Чтобы понять, почему в данном случае !$e равно true, посморите функцию @see df_xml_exists() * * Так вот, @see df_xml_exists() для текстового узла всегда возвращает false, * даже если текстовое значение не приводится к false (то же «147»). * * Почему так происходит — видно из реализации @see df_xml_exists(): !empty($e) * То есть, empty($e) для текстовых узлов возвращает true. * * Например: <Остаток> <Склад> <Ид>6f87e83f-722c-11df-b336-0011955cba6b</Ид> <Количество>147</Количество> </Склад> </Остаток> * Если здесь сделать xpath Остаток/Склад/Количество, * то для узла «147» !$e почему-то вернёт true, * хотя в данном случае $e является полноценным объектом @see \SimpleXMLElement * и (string)$e возвращает «147». */ if (is_null($e)) { $result = df_call_if($default); } else { df_assert_leaf($e); $result = (string) $e; if (df_empty_string($result)) { /** * 2015-09-25 * Добавил данное условие, чтобы различать случай пустого узла и отсутствия узла. * Пример пустого узла ru_RU: * <term> * <en_US>Order Total</en_US> * <ru_RU></ru_RU> * </term> * Так вот, для пустого узла empty($e) вернёт false, * а для отсутствующего узла — true. */ $result = df_if1(empty($e), $default, ''); } } return $result; }
/** * @param string|null $key [optional] * @param string|null|callable $default [optional] * @return string|array(string => string) */ function df_request($key = null, $default = null) { /** @var string|array(string => string) $result */ if (is_null($key)) { $result = df_request_o()->getParams(); } else { $result = df_request_o()->getParam($key); $result = df_if1(is_null($result) || '' === $result, $default, $result); } return $result; }
/** * 2015-08-16 * @used-by leafB() * @used-by leafF() * @used-by leafI() * @used-by leafSne() * @param string $name * @param string|null|callable $default [optional] * @param string $function [optional] * @return string|null */ public function leaf($name, $default = null, $function = 'df_leaf') { /** @var string $key */ $key = df_ckey($name, $function); if (!isset($this->{__METHOD__}[$key])) { $this->{__METHOD__}[$key] = df_n_set(call_user_func($function, $this->e()->{$name})); } /** @var string|null $result */ $result = df_n_get($this->{__METHOD__}[$key]); return df_if1(is_null($result), $default, $result); }