Skoro masz X wartości zawsze, to tylko z nimi zrób konstruktor. Zauważ, że pozostałe rzeczy są opcjonalne i tak naprawdę to osobne operacje, czyli coś, czym tak naprawdę konstruktor nie powinien się zajmować. Wydziel to jako osobne metody.
class Photo {
public function __construct ($nazwa, $katalog, $maksymalna_waga, $szerokosc, $wysokosc, $obrazek) { /* kod */};
public function drop ($filepath) { /* kod */ };
public function thumb ($szerokosc_min, $wysokosc_min) { /* kod */};
}
Choć jak dla mnie, to źle podchodzisz do tego. Czemu? Bo do operacji na obrazie powinieneś w jakiś sposób przekazać uchwyt do pliku, ścieżkę czy coś w tym stylu... Nie nazwę inputa. To słabe, bo nieelastyczne podejście. A co jeśli będziesz operował na obrazach nieformularzowych? Tak naprawdę do konstruktora potrzebny Ci plik lub ścieżka do niego. Wszystko inne konstruktor sam może ustawić. Bo i co Ci potrzebne? Konstruktor wysokość i szerokość sam odczyta przy próbie odczytu pliku. Nazwę i katalog podasz jako parametr przy funkcji save(). Miniaturka to co? Nic innego jak funkcja obróbki. A więc dochodzi Ci resize() lub crop(), zależnie od sytuacji i potem save()

Samo save() co to takiego? Zależnie od kontekstu albo zapis do pliku albo bezpośredni wysył streama do przeglądarki z odpowiednim nagłówkiem. Sam pomyśl nad właściwą budową klasy i jej metodami, bo to co kombinujesz to jest jakiś overkill, gdzie samym konstruktorem robisz pierdyliard rzeczy, choć można je na prostsze, bardziej elementarne funkcje rozpisać. Na dodatek jeśli zastosujesz chaining, to możesz to ciurkiem zrobić.
EDIT: To oczywiście tyczy się samej klasy obrazu. Jeśli chcesz z kolei to wziąć pod uwagę jako pole file do walidacji w formularzu to... prześlij obiekt swojej klasy i reguły walidacji, które potem porównasz z właściwościami obiektu swej klasy. Przykład? Tworzysz formularz z polem typu file o nazwie 'photo' i odpowiednimi regułami walidacji:
$form->add('photo', 'file', [
'valid' => [
'maxWidth' => 300,
'maxHeight' => 300,
'maxWeight' => 280000,
'allowedTypes' => [
'image/jpeg', 'image/gif', 'image/png'
]
]
]);
A najlepiej te reguły w osobną klasę walidacji opakuj, by w razie czego każda reguła to był osobny obiekt, z własnymi komunikatami, parametrami i tak dalej. Bo i wtedy możesz na całość jeszcze translacje oraz inne cuda założyć. Wtedy w razie błędu obiekt zwróci swój własny komunikat. Sam formularz wtedy się zajmie czym trzeba. Pamiętaj, że wszystko ma swoją dziedzinę. Podziel całość, wydziel zakresy działalności i... uprość jak się da, ale nie bardziej