PHP将类对象插入数据库

时间:2013-05-31 14:27:13

标签: php object

我的问题是我应该如何将php类对象插入数据库? 如果我有

Cat.php

class Cat{
private $name;

public function setName($name){
 $this->name = $name
}

public function database(){
....$this->name;
 //Insert stuff into db 
}

}

Somefile.php

if($_POST['catname']){
  //This way?
  $obj1 = new Cat();
  $obj1->setName($_POST['catname']);
  $obj1->database();

  //Or this way
  //Insert Cat directly into the db without creating an object of Cat


}

我想将这只猫插入数据库。是否最好在cat中创建一个获得$ this->名称的函数,或者在创建对象之前,我应该将其插入到数据库中吗?

6 个答案:

答案 0 :(得分:3)

最简单的方法是将类序列化为字符串。

$string = serialize($cat);

http://php.net/manual/en/language.oop5.serialization.php

但是这样你会在数据库中产生大量开销。

最好的方法是在表格中包含相关字段,然后保存相应的值。您可以轻松创建一个函数,将类读取/保存到表中。这将使您的数据更加便携和可交换。

答案 1 :(得分:2)

您可以使用serialize,如果您有一个好的自动加载器,则不必担心在反序列化时该类不存在。

另请注意您可以使用的两个魔术功能:

__sleep() - 序列化对象时使用的自定义代码

__wakeup() - 反序列化对象时的自定义代码

<强> PS:

替换:

$obj1->setName = $_POST['catname'];

$obj1->setName($_POST['catname']);

<强>参考文献:

答案 2 :(得分:0)

理想情况下,对象本身应该将自己保存到数据库中。这样,您的逻辑就不需要知道cat是什么,或者它在哪里保存。 cat类应该是自包含的,这意味着如果您想要在将来更改数据库类型或其他任何内容,您可以在类中创建它而不会影响您的逻辑。

答案 3 :(得分:0)

您应该有一个单独的对象,它接受cat的实例并将数据放入数据库。您可能希望有一个getVitalData方法,它提供应该进入数据库的所有数据(最终可能只有名称)。

Each class should have one responsibility

答案 4 :(得分:0)

通常,项目中有多个图层,其中一个图层是DAO(数据访问对象)。在此类中,您将应用程序链接到数据库。该层必须通过保存方法将对象保存到数据库中,例如......

您想要更改数据库的那一天,您只需重写此图层

非常理想,DAO层中存在的对象与模型对象(CAT)不同:它是一个持久的Object,看起来像数据库中的表

答案 5 :(得分:0)

看看序列化和反序列化,如果需要,可以将序列化字符串存储在数据库中 - 这是一个简单的例子。

<?php
class Cat {
    protected
        $name;
    public function getName() {
        return $this->name;
    }
    public function setName($name) {
        $this->name = $name;
        return $this;
    }
}

$cat = new Cat;
$cat->setName('Tiddles');

$string = serialize($cat);
$cat    = unserialize($string);

var_dump($cat);

/*
    object(Cat)#2 (1) {
      ["name":protected]=>
      string(7) "Tiddles"
    }
*/

安东尼。