Funkcja powinna mieć jasno określone, wąskie obowiązki z jasno określonymi, minimalistycznymi typami zwracanych. Jeśli zaczniesz tworzyć „boskie funkcje”, które zrobią wszystko i zlewozmywak w zależności od argumentów, które podasz, wpadniesz na terytorium trudnego do utrzymania kodu spaghetti. Nie chcesz funkcji, która wykonuje A i zwraca B, jeśli przekazujesz X, ale wykonuje C i zwraca D, jeśli ją przekazujesz Y itd...
Dobrym pomysłem jest rozpoczęcie betonowania i uogólniaj w miarę upływu czasu, gdy widzisz pojawiające się podobne wzorce. Stwórz więc metody, których faktycznie potrzebujesz:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
Jeśli okaże się, że masz wspólny kod między tymi funkcjami, ujednolicić kod za kulisami, aby był suchy:
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) {
...
}
Nie zaczynaj na odwrót, myśląc, że „potrzebujesz tylko X, Y i Z”, które wydają się na tyle podobne, że można je ujednolicić w jedną metodę, a później dowiadujesz się, że są małe różnice między X, Y i Z i zaśmiecasz swój kod specjalne przypadki dla każdego. To po prostu prowadzi do funkcji, które są albo ogromne, albo tak ogólne, że w zasadzie same nic nie robią.