/** * 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 Exception When trying to dump PHP resource */ public static function dump($value) { $trueValues = '1.1' == Yaml::getSpecVersion() ? array('true', 'on', '+', 'yes', 'y') : array('true'); $falseValues = '1.1' == Yaml::getSpecVersion() ? array('false', 'off', '-', 'no', 'n') : array('false'); switch (true) { case is_resource($value): throw new Exception('Unable to dump PHP resources in a YAML file.'); 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_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : (is_string($value) ? "'{$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): return "'{$value}'"; case in_array(strtolower($value), $trueValues): return "'{$value}'"; case in_array(strtolower($value), $falseValues): return "'{$value}'"; case in_array(strtolower($value), array('null', '~')): return "'{$value}'"; default: return $value; } }
/** * 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 */ public static function dumpInline($value) { if (is_resource($value)) { return "null"; } elseif (is_object($value)) { return "!!php/object:" . serialize($value); } elseif (is_array($value)) { return self::dumpInlineArray($value); } elseif ($value === null) { return "null"; } elseif ($value === true) { return "true"; } elseif ($value === false) { return "false"; } elseif (ctype_digit($value)) { return is_string($value) ? "\"{$value}\"" : (int) $value; } elseif (is_numeric($value)) { $locale = setlocale(LC_NUMERIC, 0); if ($locale !== false) { 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}"; } } elseif (is_string($value)) { $repr = "'{$value}'"; } else { $repr = (string) $value; } if ($locale !== false) { setlocale(LC_NUMERIC, $locale); } return $repr; } elseif ($value === "") { return "''"; } elseif (strstr($value, "\n") !== false) { return "|\n " . preg_replace("/\\n/", "\n ", $value); } elseif (Escaper::requiresDoubleQuoting($value)) { return Escaper::escapeWithDoubleQuotes($value); } elseif (Escaper::requiresSingleQuoting($value) || preg_match(Inline::getHexRegex(), $value) || preg_match(Inline::getTimestampRegex(), $value)) { return Escaper::escapeWithSingleQuotes($value); } else { return $value; } }