1

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

猫.php

class Cat{
private $name;

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

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

}

一些文件.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->name 的函数,还是在创建对象之前将其插入数据库?

4

6 回答 6

2

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

$string = serialize($cat);

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

但是这样你会在你的数据库中创建很多开销。

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

于 2013-05-31T14:33:09.700 回答
2

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

另请注意您可以使用的 2 个魔术函数:

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

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

PS:

代替:

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

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

参考:

于 2013-05-31T14:34:23.840 回答
1

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

于 2013-05-31T14:30:57.720 回答
1

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

每个班级应该有一个责任

于 2013-05-31T14:31:05.643 回答
1

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

你想改变数据库的那一天,你只需重写这一层

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

于 2013-05-31T14:34:03.450 回答
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"
    }
*/

安东尼。

于 2013-05-31T14:39:26.903 回答