Так, первое.
Передавать в виде массива аргументы - просто отвратительно. Потому что придется знать/заучивать ключи массива, что не очень хорошо, а точнее - ужасно.
Представь, если бы все функции в PHP принимали только один массив! Каково бы было? Ты бы смог помнить туеву хучу ключей для каждой функции? Нет.
Далее, редактор не подскажет/покажет, что должен принимать метод или функция. Осложняется phpDoc-ументирование.
Второе.
Если твой класс принимает некие свойства, без которых функционирование класса невозможно в полном объеме, то надо писать сеттеры и геттеры. На каждое свойство.
Это хорошая и правильная практика. Пихать все в конструктор - совсем не лучшая идея. А сеттеры и геттеры позволяют изменить свойства класса в режиме "реального времени".
Когда можно кидать массив с параметрами в функцию или метод? В очень незначительных случаях, когда пропуск того или иного элемента такого массива особо ни на что не повлияет.
Т.е. суть в следующем - класс должен обладать внятным и прозрачным интерфейсом. Передача массива - это антипод такого класса.