Снова прошу вашего совета. Проблема пустяковая, но как говорится за спрос не бьют.
Есть две функции. Они полностью идентичные кроме одного-они добавляют в разные таблицы. То есть параметры для функций, алгоритм все одинаковое. У каждой функции есть по 4 вспомогательные функции. Они тоже идентичные. 1 вспомогательная функция отвечает за валидацию, 2 функция проверяет нет ли уже в Бд такой записи, 3 функция возвращает 5 записей в виде объекта, 4 функция возвращает 5 записей в виде массива. Я вот думаю, имеет ли смысл держать для каждой таблицы индивидуальные функции или сделать одну общую функцию?
Код для наглядности привожу ниже:
public function addType($name, $userId) {
$validateWord = $this->validateTypeName($name);
if(isset($validateWord['error'])) return $validateWord;
$name = $validateWord['success'];
if(!$this -> doesTypeAlreadyExist($name)) {
return ["error"=>"duplicate"];
}
$mysqli = DB::getInstance()->getConnection();
$time = time();
$sql = "INSERT INTO `type` (name,user_id,time) VALUES ('".$name."','".$userId."','".$time."')";
$result = $mysqli->query($sql);
if($mysqli->affected_rows == 1){
return ["id"=>$mysqli->insert_id,"name"=>$name,"user_id"=>$userId,"time"=>$time];
}
return ["error" => "unknown error"];
}
private function validateTypeName($name) {
if(empty($name) || is_array($name)){
return ["error" => "Data error"];
}
$names = explode(" ",ltrim($name));
$word = strip_tags($names[0]);
$word = mb_substr($word,0,10);
/*так как в php нет встроенной функции mb_ucfirst ниже костыль. Запаковать в хэлпер*/
$fc = mb_strtoupper(mb_substr($word,0,1)); //поднимаем первый символ
$word = $fc.mb_strtolower(mb_substr($word,1));
if(strlen($word)<7) {
return ["error" => "Word too little"];
}
return ["success" => $word];
}
private function doesTypeAlreadyExist($name) {
$mysqli = DB::getInstance()->getConnection();
$sql = "SELECT `id` FROM `type` WHERE `name`= '".$name."' LIMIT 1";
$result = $mysqli->query($sql);
if($result->num_rows == 0){
return true;
}
return false;
}
public function getAllTypes($offset) {
$array = array();
$mysqli = DB::getInstance()->getConnection();
$sql = "SELECT * FROM `type` ORDER BY `id` DESC LIMIT $offset,5";
$result = $mysqli->query($sql);
if($result->num_rows == 0){
return [];
}
while ($row = $result->fetch_object()) {
$array[$row->id] = new stdClass();
$array[$row->id]->id = $row->id;
$array[$row->id]->name = $row->name;
$array[$row->id]->user_id = $row->user_id;
$array[$row->id]->time = $row->time;
}
return $array;
}
public function getAllTypes2($offset) {
$array = array();
$mysqli = DB::getInstance()->getConnection();
$sql = "SELECT * FROM `type` ORDER BY `id` DESC LIMIT $offset,5";
$result = $mysqli->query($sql);
if($result->num_rows == 0){
return [];
}
while ($row = $result->fetch_assoc()) {
$array[] = $row;
}
return $array;
}
Для 2 все то же самое, только type меняется на word.
Критика, советы, решения, мысли - все приветствуется.