Как избежать дублирования кода?
У меня следующая проблема, эти методы моего SQLBuilder просто одинаковы, что я могу сделать, чтобы уменьшить код?
public function select($fields){
if(is_array($fields)){
$this->fields = implode(',', $fields);
} else {
$this->fields = $fields;
}
return $this;
}
public function from($tables){
if(is_array($tables)){
$this->tables = implode(',', $tables);
} else {
$this->tables = $tables;
}
return $this;
}
2 ответа
Решение
Создать общий частный метод, который выполняет обработку, а затем открытые методы, которые их используют
public function select($fields){
return $this->builddata($fields, 'fields');
}
public function from($tables){
return $this->builddata($tables, 'tables');
}
private function builddata($data, $storage) {
if(is_array($data)){
$data = implode(',', $data);
}
$this->$storage = $data; // variable variable
return $this;
}
Или же
public function action($data, $type){
if(is_array($data)){
$this->$type = implode(',', $data);
} else {
$this->$type = $data;
}
return $this;
}
затем
$this->action($data, 'select');