我的问题是我应该如何将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->名称的函数,或者在创建对象之前,我应该将其插入到数据库中吗?
答案 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
方法,它提供应该进入数据库的所有数据(最终可能只有名称)。
答案 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"
}
*/
安东尼。