Возможно, речь идет о коде, который я как-то на ходу сочинял здесь для кого-то.
Только понятное дело, весь смысл давно улетучился, и остался голимый, эталонный карго-культ, самолеты из соломы.
Там шла речь о примитивном ORM по паттерну Table Gateway, чтобы упростить и обезопасить базовые CRUD операции.
abstract class BasicTableGateway
{
protected $db;
protected $table;
protected $fields;
protected $primary = 'id';
public function __construct(\PDO $db)
{
$this->db = $db;
}
public function read($id): ?array
{
$stmt = $this->db->prepare("SELECT * FROM `$this->table` WHERE `$this->primary`=?");
$stmt->execute([$id]);
return $stmt->fetcn();
}
public function insert($data): int
{
$this->checkFields($data);
$fields = '`'.implode("`,`", array_keys($data)).'`';
$placeholders = str_repeat('?,', count($data) - 1) . '?';
$sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
$this->db->prepare($sql)->execute(array_values($data));
return $this->db->lastInsertId();
}
// и так далее
protected function checkFields($data)
{
$diff = array_diff(array_keys($data), $this->fields);
if ($diff) {
throw new \InvalidArgumentException("Unknown field(s): ". implode($diff));
}
}
}
То есть идея в том, чтобы определить все имена колонок при создании класса, так чтобы код мог проверять, что нам в ключи массива не насували лишнего
class UserGateway extends BasicTableGateway {
protected $table = 'gw_users';
protected $fields = ['email', 'password', 'name', 'birthday'];
}
$userGateway = new UserGateway($pdo);
$data = [
'email' => 'foo@bar.com',
'password' => 123,
'name' => 'Fooster',
];
$id = $userGateway->insert($data);
Получается быстро удобно и
безопасно.
Но в текущем варианте удобство, осмысленность и безопасность улетучились, остались только какие-то невнятные идеи.