У меня есть класс для каждой таблицы базы данных, например, events
строки таблицы хранятся в Event
классах. Для каждого класса, который я пишу, есть несколько абсолютно одинаковых методов с разными именами переменных или столбцов. Например:
Класс игрока update()
public function update() {
$conn = new PDO( db_host, db_user, db_pw );
$sql = "UPDATE players SET name=:name, picture=:picture, position=:position, num=:num, team=:team, description=:description WHERE id = :id";
$st = $conn->prepare ( $sql );
$st->bindValue( ":name", $this->name, PDO::PARAM_STR );
$st->bindValue( ":picture", $this->picture, PDO::PARAM_STR );
$st->bindValue( ":position", $this->position, PDO::PARAM_STR );
$st->bindValue( ":num", $this->num, PDO::PARAM_INT );
$st->bindValue( ":team", $this->team, PDO::PARAM_INT );
$st->bindValue( ":description", $this->description, PDO::PARAM_STR);
$st->bindValue( ":id", $this->id, PDO::PARAM_INT );
$st->execute();
$conn = null;
}
Класс команды update()
public function update() {
$conn = new PDO( db_host, db_user, db_pw );
$sql = "UPDATE teams SET name=:name, sname=:sname, logo=:logo, sport=:sport WHERE id = :id";
$st = $conn->prepare ( $sql );
$st->bindValue( ":name", $this->name, PDO::PARAM_STR );
$st->bindValue( ":sname", $this->sname, PDO::PARAM_STR );
$st->bindValue( ":logo", $this->logo, PDO::PARAM_STR );
$st->bindValue( ":sport", $this->sport, PDO::PARAM_STR );
$st->bindValue( ":id", $this->id, PDO::PARAM_INT );
$st->execute();
$conn = null;
}
Как вы можете видеть, смысл методов одинаков, этопросто разные переменные связаны с оператором (это имеет место с большим количеством методов). Есть ли простой способ сделать это так, чтобы у каждого класса были одинаковые базовые методы update()
, insert()
, delete()
..., но с соответствующими переменными? Я думал о наследовании базового поведения от суперкласса, но с точки зрения ОО не имеет особого смысла (и я не уверен, что есть какой-либо способ сказать «для каждой публичной переменной, объявленной в этом классе»), но я неконечно, если есть способ сделать это, используя композиции (или вообще, на самом деле).