*
* @var int
*/
- protected $indentation = 4;
+ protected $indentation;
+
+ /**
+ * @param int $indentation
+ */
+ public function __construct($indentation = 4)
+ {
+ if ($indentation < 1) {
+ throw new \InvalidArgumentException('The indentation must be greater than zero.');
+ }
+
+ $this->indentation = $indentation;
+ }
/**
* Sets the indentation.
*
* @param int $num The amount of spaces to use for indentation of nested nodes
+ *
+ * @deprecated since version 3.1, to be removed in 4.0. Pass the indentation to the constructor instead.
*/
public function setIndentation($num)
{
- if ($num < 1) {
- throw new \InvalidArgumentException('The indentation must be greater than zero.');
- }
+ @trigger_error('The '.__METHOD__.' method is deprecated since version 3.1 and will be removed in 4.0. Pass the indentation to the constructor instead.', E_USER_DEPRECATED);
$this->indentation = (int) $num;
}
/**
* Dumps a PHP value to YAML.
*
- * @param mixed $input The PHP value
- * @param int $inline The level where you switch to inline YAML
- * @param int $indent The level of indentation (used internally)
- * @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
+ * @param mixed $input The PHP value
+ * @param int $inline The level where you switch to inline YAML
+ * @param int $indent The level of indentation (used internally)
+ * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
*
* @return string The YAML representation of the PHP value
*/
- public function dump($input, $inline = 0, $indent = 0, $exceptionOnInvalidType = false, $objectSupport = false)
+ public function dump($input, $inline = 0, $indent = 0, $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() >= 5) {
+ @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(4)) {
+ $flags |= Yaml::DUMP_OBJECT;
+ }
+ }
+
$output = '';
$prefix = $indent ? str_repeat(' ', $indent) : '';
+ $dumpObjectAsInlineMap = true;
- if ($inline <= 0 || !is_array($input) || empty($input)) {
- $output .= $prefix.Inline::dump($input, $exceptionOnInvalidType, $objectSupport);
+ if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) {
+ $dumpObjectAsInlineMap = empty((array) $input);
+ }
+
+ if ($inline <= 0 || (!is_array($input) && $dumpObjectAsInlineMap) || empty($input)) {
+ $output .= $prefix.Inline::dump($input, $flags);
} else {
- $isAHash = Inline::isHash($input);
+ $dumpAsMap = Inline::isHash($input);
foreach ($input as $key => $value) {
- $willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value);
+ if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && is_string($value) && false !== strpos($value, "\n")) {
+ $output .= sprintf("%s%s%s |\n", $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '');
+
+ foreach (preg_split('/\n|\r\n/', $value) as $row) {
+ $output .= sprintf("%s%s%s\n", $prefix, str_repeat(' ', $this->indentation), $row);
+ }
+
+ continue;
+ }
+
+ $dumpObjectAsInlineMap = true;
+
+ if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) {
+ $dumpObjectAsInlineMap = empty((array) $value);
+ }
+
+ $willBeInlined = $inline - 1 <= 0 || !is_array($value) && $dumpObjectAsInlineMap || empty($value);
$output .= sprintf('%s%s%s%s',
$prefix,
- $isAHash ? Inline::dump($key, $exceptionOnInvalidType, $objectSupport).':' : '-',
+ $dumpAsMap ? Inline::dump($key, $flags).':' : '-',
$willBeInlined ? ' ' : "\n",
- $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $exceptionOnInvalidType, $objectSupport)
+ $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags)
).($willBeInlined ? "\n" : '');
}
}