Я относительный новичок в PHP, и я выясняю, как лучше всего реализовать код доступа к базе данных. Я пытаюсь создать несколько простых объектов доступа к базе данных - каждая таблица получает свой собственный класс, каждый экземпляр класса представляет собой строку в таблице, вы знаете, что это упражнение.
У меня есть код, который, кажется, работает, но некоторые из того, что я видел в Интернете, заставляют меня беспокоиться, что мой подход может быть неправильным. И так как "Могу ли я это сделать?" и "СЛЕДУЕТ Я это сделаю?" это два разных вопроса, я надеялся, что некоторые ветеринары PHP могут перезвонить.
Моя текущая стратегия заключается в создании абстрактного класса таблиц базового уровня, который содержит весь общий код, и затем каждый класс, представляющий отдельную таблицу, расширяет его.
Моя главная проблема - это код:
abstract class Table {
protected abstract static function get_fields();
protected abstract static function get_primary_key();
protected abstract static function get_table_name();
Идея состоит в том, что каждый реализующий класс будет определять имена полей, первичный ключ (ы), имя таблицы и т.д., а затем класс таблицы будет использовать эти функции для заполнения конкретных пробелов, например:
static function insert($values) {
$field_list = array();
$value_list = array();
foreach (static::get_fields() as $field_name) {
if (isset($values[$field_name])) {
$field_list[] = $field_name;
$value_list[] = self::escape($values[$field_name]);
}
}
$field_string = join(", ", $field_list);
$value_string = "'" . join("', '", $value_list) . "'";
$sql = "insert into " . static::get_table_name() . " ($field_string) values ($value_string)";
Как вы можете видеть, ключ состоит в том, что я обращаюсь к этим функциям static abstract
, предварительно используя их static::
. И насколько я могу судить, это работает!
Однако принятый ответ этого вопроса указывает, что функции abstract static
все еще не разрешены в 5.3.
Итак, я пытаюсь понять, что с этим делать. Является ли ответ неправильным - функции abstract static
теперь считаются вполне законным PHP-кодом? Я делаю что-то нецелесообразное в своем коде? Есть ли другой подход, который я должен рассмотреть?