Una función debe tener responsabilidades estrechas y claramente definidas con tipos de retorno minimalistas y claramente definidos. Si comienza a crear "funciones divinas" que hacen todo y el fregadero de la cocina según los argumentos que pase, se adentrará en el territorio del código de espagueti difícil de mantener. No quieres una función que haga A y devuelva B si le pasas X, pero que haga C y devuelva D si le pasas Y, etc...
Es una buena idea empezar concreto y generalice con el tiempo a medida que vea surgir patrones similares. Por lo tanto, cree los métodos que realmente necesita:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
Si encuentra que ha compartido código entre estas funciones, unifique el código detrás de escena para mantenerlo SECO:
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) {
...
}
No comience al revés, pensando que "solo necesita X, Y y Z", que parecen lo suficientemente similares como para unificarse en un solo método, y luego descubra que hay pequeñas diferencias entre X, Y y Z y ensucie su código con casos especiales para cada uno. Eso solo conduce a funciones que son enormes o tan generales que básicamente no hacen nada por sí mismas.