예제 #1
0
 /**
  * Dumps a given PHP variable to a YAML string.
  *
  * @param mixed $value The PHP variable to convert
  *
  * @return string The YAML string representing the PHP array
  *
  * @throws DumpException When trying to dump PHP resource
  */
 public static function dump($value)
 {
     switch (true) {
         case is_resource($value):
             throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
         case is_object($value):
             return '!!php/object:' . serialize($value);
         case is_array($value):
             return self::dumpArray($value);
         case null === $value:
             return 'null';
         case true === $value:
             return 'true';
         case false === $value:
             return 'false';
         case ctype_digit($value):
             return is_string($value) ? "'{$value}'" : (int) $value;
         case is_numeric($value):
             return is_string($value) ? "'{$value}'" : (is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : $value);
         case Escaper::requiresDoubleQuoting($value):
             return Escaper::escapeWithDoubleQuotes($value);
         case Escaper::requiresSingleQuoting($value):
             return Escaper::escapeWithSingleQuotes($value);
         case '' == $value:
             return "''";
         case preg_match(self::getTimestampRegex(), $value):
         case in_array(strtolower($value), array('null', '~', 'true', 'false')):
             return "'{$value}'";
         default:
             return $value;
     }
 }
예제 #2
0
 public static function dump($value, $exceptionOnInvalidType = false, $objectSupport = false)
 {
     switch (true) {
         case is_resource($value):
             if ($exceptionOnInvalidType) {
                 throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
             }
             return 'null';
         case is_object($value):
             if ($objectSupport) {
                 return '!!php/object:' . serialize($value);
             }
             if ($exceptionOnInvalidType) {
                 throw new DumpException('Object support when dumping a YAML file has been disabled.');
             }
             return 'null';
         case is_array($value):
             return self::dumpArray($value, $exceptionOnInvalidType, $objectSupport);
         case null === $value:
             return 'null';
         case true === $value:
             return 'true';
         case false === $value:
             return 'false';
         case ctype_digit($value):
             return is_string($value) ? "'{$value}'" : (int) $value;
         case is_numeric($value):
             $locale = setlocale(LC_NUMERIC, 0);
             if (false !== $locale) {
                 setlocale(LC_NUMERIC, 'C');
             }
             $repr = is_string($value) ? "'{$value}'" : (is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : strval($value));
             if (false !== $locale) {
                 setlocale(LC_NUMERIC, $locale);
             }
             return $repr;
         case Escaper::requiresDoubleQuoting($value):
             return Escaper::escapeWithDoubleQuotes($value);
         case Escaper::requiresSingleQuoting($value):
             return Escaper::escapeWithSingleQuotes($value);
         case '' == $value:
             return "''";
         case preg_match(self::getTimestampRegex(), $value):
         case in_array(strtolower($value), array('null', '~', 'true', 'false')):
             return "'{$value}'";
         default:
             return $value;
     }
 }
예제 #3
0
 /**
  * Dumps a given PHP variable to a YAML string.
  *
  * @param mixed $value The PHP variable to convert
  * @param int   $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
  *
  * @return string The YAML string representing the PHP array
  *
  * @throws DumpException When trying to dump PHP resource
  */
 public static function dump($value, $flags = 0)
 {
     if (is_bool($flags)) {
         @trigger_error('Passing a boolean flag to toggle exception handling is deprecated since version 3.1 and will be removed in 4.0. Use the Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE flag instead.', E_USER_DEPRECATED);
         if ($flags) {
             $flags = Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE;
         } else {
             $flags = 0;
         }
     }
     if (func_num_args() >= 3) {
         @trigger_error('Passing a boolean flag to toggle object support is deprecated since version 3.1 and will be removed in 4.0. Use the Yaml::DUMP_OBJECT flag instead.', E_USER_DEPRECATED);
         if (func_get_arg(2)) {
             $flags |= Yaml::DUMP_OBJECT;
         }
     }
     switch (true) {
         case is_resource($value):
             if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) {
                 throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
             }
             return 'null';
         case $value instanceof \DateTimeInterface:
             return $value->format('c');
         case is_object($value):
             if (Yaml::DUMP_OBJECT & $flags) {
                 return '!php/object:' . serialize($value);
             }
             if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) {
                 return self::dumpArray((array) $value, $flags);
             }
             if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) {
                 throw new DumpException('Object support when dumping a YAML file has been disabled.');
             }
             return 'null';
         case is_array($value):
             return self::dumpArray($value, $flags);
         case null === $value:
             return 'null';
         case true === $value:
             return 'true';
         case false === $value:
             return 'false';
         case ctype_digit($value):
             return is_string($value) ? "'{$value}'" : (int) $value;
         case is_numeric($value):
             $locale = setlocale(LC_NUMERIC, 0);
             if (false !== $locale) {
                 setlocale(LC_NUMERIC, 'C');
             }
             if (is_float($value)) {
                 $repr = (string) $value;
                 if (is_infinite($value)) {
                     $repr = str_ireplace('INF', '.Inf', $repr);
                 } elseif (floor($value) == $value && $repr == $value) {
                     // Preserve float data type since storing a whole number will result in integer value.
                     $repr = '!!float ' . $repr;
                 }
             } else {
                 $repr = is_string($value) ? "'{$value}'" : (string) $value;
             }
             if (false !== $locale) {
                 setlocale(LC_NUMERIC, $locale);
             }
             return $repr;
         case '' == $value:
             return "''";
         case self::isBinaryString($value):
             return '!!binary ' . base64_encode($value);
         case Escaper::requiresDoubleQuoting($value):
             return Escaper::escapeWithDoubleQuotes($value);
         case Escaper::requiresSingleQuoting($value):
         case preg_match('{^[0-9]+[_0-9]*$}', $value):
         case preg_match(self::getHexRegex(), $value):
         case preg_match(self::getTimestampRegex(), $value):
             return Escaper::escapeWithSingleQuotes($value);
         default:
             return $value;
     }
 }
예제 #4
0
 /**
  * Dumps a given PHP variable to a YAML string.
  *
  * @param mixed $value                  The PHP variable to convert
  * @param bool  $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
  * @param bool  $objectSupport          true if object support is enabled, false otherwise
  *
  * @return string The YAML string representing the PHP array
  *
  * @throws DumpException When trying to dump PHP resource
  */
 public static function dump($value, $exceptionOnInvalidType = false, $objectSupport = false)
 {
     switch (true) {
         case is_resource($value):
             if ($exceptionOnInvalidType) {
                 throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
             }
             return 'null';
         case is_object($value):
             if ($objectSupport) {
                 return '!php/object:' . serialize($value);
             }
             if ($exceptionOnInvalidType) {
                 throw new DumpException('Object support when dumping a YAML file has been disabled.');
             }
             return 'null';
         case is_array($value):
             return self::dumpArray($value, $exceptionOnInvalidType, $objectSupport);
         case null === $value:
             return 'null';
         case true === $value:
             return 'true';
         case false === $value:
             return 'false';
         case ctype_digit($value):
             return is_string($value) ? "'{$value}'" : (int) $value;
         case is_numeric($value):
             $locale = setlocale(LC_NUMERIC, 0);
             if (false !== $locale) {
                 setlocale(LC_NUMERIC, 'C');
             }
             if (is_float($value)) {
                 $repr = (string) $value;
                 if (is_infinite($value)) {
                     $repr = str_ireplace('INF', '.Inf', $repr);
                 } elseif (floor($value) == $value && $repr == $value) {
                     // Preserve float data type since storing a whole number will result in integer value.
                     $repr = '!!float ' . $repr;
                 }
             } else {
                 $repr = is_string($value) ? "'{$value}'" : (string) $value;
             }
             if (false !== $locale) {
                 setlocale(LC_NUMERIC, $locale);
             }
             return $repr;
         case '' == $value:
             return "''";
         case Escaper::requiresDoubleQuoting($value):
             return Escaper::escapeWithDoubleQuotes($value);
         case Escaper::requiresSingleQuoting($value):
         case preg_match(self::getHexRegex(), $value):
         case preg_match(self::getTimestampRegex(), $value):
             return Escaper::escapeWithSingleQuotes($value);
         default:
             return $value;
     }
 }
예제 #5
0
 /**
  * Dumps a given PHP variable to a YAML string.
  *
  * @param mixed $value                  The PHP variable to convert
  * @param bool  $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
  * @param int   $flags                  A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
  *
  * @return string The YAML string representing the PHP array
  *
  * @throws DumpException When trying to dump PHP resource
  */
 public static function dump($value, $exceptionOnInvalidType = false, $flags = 0)
 {
     if (is_bool($flags)) {
         @trigger_error('Passing a boolean flag to toggle object support is deprecated since version 3.1 and will be removed in 4.0. Use the Yaml::DUMP_OBJECT flag instead.', E_USER_DEPRECATED);
         $flags = (int) $flags;
     }
     switch (true) {
         case is_resource($value):
             if ($exceptionOnInvalidType) {
                 throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
             }
             return 'null';
         case is_object($value):
             if (Yaml::DUMP_OBJECT & $flags) {
                 return '!php/object:' . serialize($value);
             }
             if ($exceptionOnInvalidType) {
                 throw new DumpException('Object support when dumping a YAML file has been disabled.');
             }
             return 'null';
         case is_array($value):
             return self::dumpArray($value, $exceptionOnInvalidType, $flags);
         case null === $value:
             return 'null';
         case true === $value:
             return 'true';
         case false === $value:
             return 'false';
         case ctype_digit($value):
             return is_string($value) ? "'{$value}'" : (int) $value;
         case is_numeric($value):
             $locale = setlocale(LC_NUMERIC, 0);
             if (false !== $locale) {
                 setlocale(LC_NUMERIC, 'C');
             }
             if (is_float($value)) {
                 $repr = (string) $value;
                 if (is_infinite($value)) {
                     $repr = str_ireplace('INF', '.Inf', $repr);
                 } elseif (floor($value) == $value && $repr == $value) {
                     // Preserve float data type since storing a whole number will result in integer value.
                     $repr = '!!float ' . $repr;
                 }
             } else {
                 $repr = is_string($value) ? "'{$value}'" : (string) $value;
             }
             if (false !== $locale) {
                 setlocale(LC_NUMERIC, $locale);
             }
             return $repr;
         case '' == $value:
             return "''";
         case Escaper::requiresDoubleQuoting($value):
             return Escaper::escapeWithDoubleQuotes($value);
         case Escaper::requiresSingleQuoting($value):
         case preg_match(self::getHexRegex(), $value):
         case preg_match(self::getTimestampRegex(), $value):
             return Escaper::escapeWithSingleQuotes($value);
         default:
             return $value;
     }
 }