@phpcoder81

Как правильно расширить класс?

Есть объект выводящий список всех машин. Как мне (в теории) расширить класс таким образом, чтобы я мог модифицировать запрос, чтобы вывести все машины, например начинающиеся на букву А. Это речь про наследование вообще?

class Car
{
  public $db;
	
  public function getAll(){
    $result = $this->db->query("SELECT * FROM `car`");
    $data = array();
    foreach($result->fetchAll() as $row){
      $data[$row['id']] = $row['model'];
    }
    return $data;
  }
}

$car = new Car();
$car->db = DB::instance();
var_dump($car->getAll());
  • Вопрос задан
  • 1182 просмотра
Решения вопроса 2
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Давайте представим что у вас помимо машин появились ещё самолёты. Тогда у вас появится второй класс:
class Aircraft
{
  public $db;
  
  public function getAll(){
    $result = $this->db->query("SELECT * FROM `aircraft`");
    $data = array();
    foreach($result->fetchAll() as $row){
      $data[$row['id']] = $row['model'];
    }
    return $data;
  }
}


То есть отличий от Car - только название таблицы. Соответственно, мы должны выделить весь код в отдельный суперкласс
class Transport
{
  public $db;
  protected $table = null;  

  public function getAll(){
    $result = $this->db->query("SELECT * FROM `{$this->table}`");
    $data = array();
    foreach($result->fetchAll() as $row){
      $data[$row['id']] = $row['model'];
    }
    return $data;
  }
}

class Car extends Transport
{
  protected $table = 'car';
}

class Car extends Transport
{
  protected $table = 'aircraft';
}


К чему это я? Ах да!
Вам нужно создать класс для доступа к базе данных отдельно. Без привязки к какой либо таблице и в нём добавить методы для выборки по конкретным условиям. И уже от него наследовать все классы, которые что то читают из таблицы.
Ответ написан
chupacabramiamor
@chupacabramiamor
Инженегр-программист
Нет. Это никакое не наследование. Делайте новый метод или модифицируйте имеющийся так, чтоб можно было манипулировать аргументом с опциями, собирая таким образом запрос в БД.
Что-то типа например:
...
public function get(Array $options = [])
{
    if (isset($options['by_name']) {
        $query = "WHERE `name` LIKE %". $options['by_name']  ."% ";
    }
...
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы