Mi permetto di dissentire da ciò che dice la Magia Creativa. Sfortunatamente, il nostro mestiere non è facile ed è lo stesso libro che mi porta alla conclusione che non dovresti svolgere questi 4 compiti all'interno del ciclo stesso, poiché questo in effetti viola lo SRP.
Tuttavia, un semplice cambio del tuo disegno soddisfa tutti i tuoi desideri: iniziamo implementando le quattro operazioni da sole, ma per una sola immagine (file). Niente loop, solo il dettaglio nitido e grintoso. A parte forse la prima operazione, tutti prendono un'immagine come input e restituiscono un'immagine leggermente modificata, che, come succede, è l'input per l'operazione successiva.
Matematicamente, la chiamiamo composizione di una funzione. Non so se esiste una libreria PHP per supportare direttamente questo, ma comunque ciò che si finisce è una funzione composta che deve essere applicata a ciascuna delle immagini. Quindi hai un ciclo con una dichiarazione e una responsabilità.
Come esempio di come questo possa apparire in un'altra lingua, considera questo pseudo codice (simile alla libreria guava di Google per Java):
composedFunction = Functions.compose(applyBorderFunction, applyWaterMarkFunction,
resizeImageFunction, fileToImageFunction)
resultingImages = allMyImageFiles.transform(composedFunction)
Se la tua lingua non è in grado di esprimere funzioni di ordine superiore, allora puoi pensare alla chiamata transform
come a un ciclo, e all'interno di quel ciclo potresti dover ricorrere alle tue singole funzioni. Tuttavia, la responsabilità di tale funzione risultante è non che implementa le singole trasformazioni della tua immagine, ma semplicemente applicando tali operazioni, qualunque esse siano.
Quindi ti ritrovi con una chiara separazione di queste due cose: una, individuale (e ancora correttamente separata) le definizioni delle operazioni che esegui sulle tue immagini, e due, l'applicazione di queste operazioni.
Come al solito, puoi trovare un design che è SOLIDO, e ancora DRY / KISS / qualunque. Ci vuole molta esperienza per giocare con diverse opzioni di design nella tua mente per trovarne una che soddisfi le tue esigenze.