Една функция трябва да има ясно дефинирани, тесни отговорности с ясно дефинирани, минималистични типове връщане. Ако започнете да създавате "божествени функции", които правят всичко и кухненската мивка в зависимост от това какви аргументи подавате, вие навлизате силно в територията на трудния за поддържане спагети код. Вие не искате функция, която прави A и връща B, ако й предадете X, но прави C и връща D, ако я предадете Y и т.н....
Добра идея е да започнете с бетон и обобщете с течение на времето, когато видите, че се появяват подобни модели. И така, създайте методите, от които всъщност се нуждаете:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
Ако откриете, че имате споделен код между тези функции, унифицирайте кода зад кулисите, за да го запазите СУХ:
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) {
...
}
Не започвайте обратното, като си мислите, че "нужни са ви само X,Y и Z", които изглеждат достатъчно сходни, за да бъдат обединени в един метод, след което по-късно откривате, че има малки разлики между X, Y и Z и захвърляте кода си с специални случаи за всеки. Това просто води до функции, които са или огромни, или толкова общи, че всъщност не правят нищо сами.