Оба решения верны, но в вашем случае я бы выбрал ваше первое решение.Здесь вы имеете дело с элементами HTML, поэтому это, вероятно, означает, что вы собираетесь поддерживать большое количество атрибутов, многие из которых являются необязательными.Это выглядит хорошо:
class ImageElement extends Element {
public function __construct($src, alt) {...}
}
$img = new ImageElement('/img/src.png', 'alt text');
Это не так приятно
class ImageElement extends Element {
public function __construct($src, $alt, $id = null, $class = null, $width = null, $height = null, $style = null, $title = null) {...}
}
$img = new ImageElement('/img/src.png', 'alt text', null, 'img-class', null, null, null, 'Image title');
Когда вам нужно передать несколько аргументов, многие из которых необязательны, лучше передать объект или массивконструктор.Это выглядит намного лучше:
$img = new ImageElement(array(
'src' => '/img/src.png',
'alt' => 'alt text',
'class' => 'img-class',
'title' => 'Image title',
));