Bir veritabanında nesne eklemek mümkün mü?

7 Cevap php

Bir veritabanında nesne eklemek mümkün mü? (PHP röportajda Sorulan.)

7 Cevap

Evet, serialize() kullanarak mümkündür.

Ama cevap hugely bağlama bağlıdır.

kimse OR-mappers önerdi? ilginç ...

onlar nesneleri temsil böylece sizin veritabanı tabloları oluşturmak varsa, veritabanına nesne üyelerinin değerlerini depolamak için bir nesne-ilişkisel mapper kullanabilirsiniz.

php için orada var propel ve diğerleri

PHP nesne hakkında konuşurken, bu veritabanına nesne eklemek mümkün değildir. Veritabanına kaydetmek için önce serialize ve kullanım sırasında un-serialize gerekiyor.

Bu soru son derece belirsiz ve tanımlanmamış. Ben bir yandan, bir nesne seri ve veritabanına eklemek demek. Ancak, "bir nesne ekleme" bağlamında bağlıdır. Örneğin, o sizin gibi bir SQL deyimi çağırabilir gerçeğine atıfta edilir:

$a = new object();

// This makes no sense.
$sql = "Insert into table_name values($a);";

Bu o zaman cevap hayır, soruyor ne ise, bunu yapamazsınız size değerleri veritabanına eklenecek döner __toString() yöntemini geçersiz sürece. O __ toString (), bir veritabanı değerleri olacak söylüyorsun, çünkü o zaman bile, sınıf iyi tanımlı değil, ancak henüz açıkça sınıf nesnesine bakmadan tanımlanmış veya ima edilmez.

Bir Nesne benzeri veritabanı tabloları temsil eden ve eğer herhangi bir durumda olsa, o zaman sorumluluklarına dayalı her öğeyi ayırmak istiyorum. Örneğin, veritabanı tablosunu tanımlar nesne A, ve sonra, ekler güncelleştirmeleri, siler bir "yönetici" B nesne var ve veritabanından öğeyi seçebilirsiniz. Örneğin:

// 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);
}

Açıkça beklediğiniz davranışları tanımlayan, çünkü yukarıda bana en mantıklı. Sadece sonra tekrar yönetici aramak ve eklemek, güncelleme ya da silebilirsiniz, veritabanı kapalı öğeleri almak için bir yöneticisini kullanın ve nesneyi değiştirebilirsiniz.

Bu ilişkisel veritabanlarına tefrika nesneleri saklamak hemen hemen tüm veritabanı normalleştirme kuralları ile çelişen ve çok kötü bir uygulama kabul edilebilir olduğu unutulmamalıdır.

Doktrin'e veya uskur gibi nesne ilişkisel Mappers kullanmanız gereken bir veritabanında nesneleri depolamak için.

Tefrika nesneler olsa dosya sistemi saklanabilir. Bu ok bulunuyor.

Kısa cevap: hayır, bu mümkün değil

Uzun cevap: doğrudan nesne eklemek değil, built-in serialize() işlevi veya bazı özel XML seri hale kullanarak, örneğin, saklamadan önce serialize gerekiyor. Sonra bazı TEXT koymak veya BLOB sütun olabilir.

Doğru cevap:, veritabanındaki nesneleri koymak bazı ORM (Object-Relational Mapping) aracını kullanın. Çoğu MVC çerçeveler ORM yerleşik, en sık kullanan Active Record desen var.

Ayrıca ukala olabilir:

Siz: ". Siz could Java veya NET ya bellek ve liman bunu, PHP nesne almak ve sonra nesneyi saklamak için Versant nesne veritabanı kullanıyoruz."