// An array value or 'class' attribute name are forced to always be an
// AttributeArray value for consistency.
if ($name == 'class' && !
is_array($value)) { // Cast the value to string in case it implements MarkupInterface.
$value =
[(string) $value];
} if (is_array($value)) { // Cast the value to an array if the value was passed in as a string.
// @todo Decide to fix all the broken instances of class as a string
// in core or cast them.
$value =
new AttributeArray($name,
$value);
} elseif (is_bool($value)) { $value =
new AttributeBoolean($name,
$value);
} // As a development aid, we allow the value to be a safe string object.
elseif ($value instanceof MarkupInterface
) { // Attributes are not supposed to display HTML markup, so we just convert
// the value to plain text.
$value = PlainTextOutput::
renderFromHtml($value);
$value =
new AttributeString($name,
$value);
}