Una funzione dovrebbe avere responsabilità ristrette e chiaramente definite con tipi di restituzione chiaramente definiti e minimalisti. Se inizi a creare "funzioni divine" che fanno tutto e il lavello della cucina a seconda degli argomenti che passi, stai andando pesantemente nel territorio del codice spaghetti difficile da mantenere. Non vuoi una funzione che faccia A e restituisca B se gli passi X, ma faccia C e restituisca D se gli passi Y ecc...
È una buona idea iniziare con concreto e generalizzare nel tempo man mano che emergono schemi simili. Quindi, crea i metodi di cui hai effettivamente bisogno:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
Se scopri di aver condiviso il codice tra queste funzioni, unifica il codice dietro le quinte per mantenerlo ASCIUTTO:
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) {
...
}
Non iniziare il contrario, pensando di "aver bisogno solo di X, Y e Z" che sembrano abbastanza simili da essere unificati in un unico metodo, quindi scoprire in seguito che ci sono piccole differenze tra X, Y e Z e disseminando il tuo codice con casi speciali per ciascuno. Questo porta solo a funzioni che sono enormi o così generali che praticamente non fanno nulla da sole.