En funktion bør have klart definerede, snævre ansvarsområder med klart definerede, minimalistiske afkasttyper. Hvis du begynder at skabe "gudefunktioner", som gør alt og køkkenvasken afhængigt af hvilke argumenter du passerer, går du tungt ind på territoriet med svær at opretholde spaghettikode. Du vil ikke have en funktion, der gør A og returnerer B, hvis du passerer den X, men gør C og returnerer D, hvis du sender den Y osv...
Det er en god idé at starte konkret og generaliser over tid, efterhånden som du ser lignende mønstre opstå. Så opret de metoder, du faktisk har brug for:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
Hvis du opdager, at du har delt kode mellem disse funktioner, skal du samle koden bag kulisserne for at holde den TØR:
public function findUserById($id) {
return $this->find('SELECT * FROM user WHERE id = ?', $id);
}
public function findUserByEmail($email) {
return $this->find('SELECT * FROM user WHERE email = ?', $email);
}
protected function find($query, $arg) {
...
}
Start ikke omvendt, og tro, at du "kun har brug for X, Y og Z", som virker ens nok til at blive forenet i én metode, for så senere at finde ud af, at der er små forskelle mellem X, Y og Z, og at strø din kode med særlige tilfælde for hver. Det fører bare til funktioner, som enten er enorme eller så generelle, at de dybest set ikke gør noget alene.