Exemplo n.º 1
0
 /**
  * 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));
 }
Exemplo n.º 2
0
Arquivo: O.php Projeto: mage2pro/core
 /**
  * Этот метод отличается от методов @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);
 }
Exemplo n.º 3
0
/**
* 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;
}
Exemplo n.º 4
0
/**
 * @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;
}
Exemplo n.º 5
0
 /**
  * 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);
 }