Previously, for "cleaner HTML" I tended to prefer something like this:
<?php
$classes = ['cat', 'dog'];
$classAtt = empty($classes) ? "" : " class='" . implode($classes, ' ') . '"';
?>
<div<$= $classAtt ?>>Text</div>
That string concatenation is just gross, but the HTML is "nicer"; the opening tag will either be or
.