Действительно ли возможно вставить Объект в базу данных? (Спрошенный в интервью PHP.)
Да, это возможно, используя serialize()
Но ответ сильно зависит от контекста.
Этот вопрос чрезвычайно расплывчатый и неопределенный. Я имею в виду, с одной стороны, вы можете сериализовать объект и вставить его в базу данных. Однако «вставка объекта» зависит от контекста. Например, имеет ли он в виду тот факт, что вы можете вызвать такой SQL-оператор, как:
$a = new object();
// This makes no sense.
$sql = "Insert into table_name values($a);";
Если это то, что он спрашивает, то ответ - нет, вы не сможете этого сделать, если не переопределите __ toString ()
метод, который возвращает значения для вставки в базу данных. Даже в этом случае класс не определен должным образом, потому что вы говорите, что __toString () будет значениями базы данных, но, тем не менее, это четко не определено или не подразумевается без ссылки на сам объект класса.
В любом случае, если объект представляет таблицы базы данных и так далее, вы хотите разделить каждый элемент на основе обязанностей. Например, у вас может быть объект A, который определяет таблицу базы данных, а затем иметь объект «менеджер» B, который вставляет, обновляет, удаляет и выбирает элемент из базы данных.Например:
// NOT REAL PHP CODE....
class Table_Name
{
// Define primary keys, foreign keys, and attributes of the table.
private $column1;
public function setColumn1($value);
public function getCOlumn1();
}
class Table_Name_Manager
{
public function insert(Table_Name $obj);
public function delete(Table_Name $obj);
public function select(Table_Name $obj);
}
Сказанное выше имеет для меня наибольший смысл, потому что оно четко определяет поведение, которого вы ожидаете. Вы можете просто использовать диспетчер, чтобы получить элементы из базы данных и изменить объект, затем вы можете снова вызвать диспетчер и вставить, обновить или удалить.
Краткий ответ: нет, это невозможно
Длинный ответ: вы не можете вставить объект напрямую, вы должны сериализовать его перед сохранением, например, используя встроенный -in функция serialize ()
или какой-нибудь настраиваемый сериализатор XML. Затем вы можете поместить его в столбец TEXT
или BLOB
.
Правильный ответ: Чтобы поместить объекты в базу данных, используйте какой-нибудь инструмент ORM (Object-Relational Mapping). Большинство фреймворков MVC имеют встроенный ORM, чаще всего использующий шаблон Active Record.
да, вы можете, вам просто нужно сериализовать его в подходящий формат. Весь смысл такого открытого вопроса, как этот, в том, чтобы найти способ сделать то, о чем спрашивают.
Вы также можете быть мудрым:
Вы: «Вы могли взять объект PHP из памяти и перенести его на Java или .NET, а затем использовать Versant объектная база данных для хранения объекта. "
никто не предлагал OR-mappers? интересно…
если вы создаете таблицы базы данных так, чтобы они представляли объекты, вы можете использовать объектно-реляционный преобразователь для сохранения значений членов вашего объекта в базе данных.
для php существует propel и многие другие
Если вы говорите об объекте PHP, невозможно вставить объект в базу данных. Чтобы сохранить его в базе данных, вам сначала необходимо сериализовать его и де-сериализовать во время использования.
Следует отметить, что сохранение сериализованных объектов в реляционных базах данных противоречит практически всем правилам нормализации базы данных и может считаться очень плохой практикой.
Для хранения объектов в базе данных вы должны использовать объектно-реляционные преобразователи, такие как Doctrine или Propel.
Сериализованные объекты могут храниться в вашей файловой системе. Это нормально.