我没有得到序列化如何帮助我编写高效的PHP 应用程序。
我目前正在开发一个关于PHP的独立项目,我创建了一个类来显示一个问题供稿,其中包含投放前端HTML的方法,处理部分也写在同一个类中。
仅举例来说,我概述的课程如下
class QuestionFeed{
protected $vars;
public function throwHTML($filter_params){
........
}
public function InsertAnswers($answer_sanitized){
.........
}
}
我有一个页面显示插入部分的前部和单独的页面。所以很自然地,我必须首先在显示页面实例化该类,然后再在处理页面实例化。 此时,可以以任何方式序列化对象吗?如何?
答案 0 :(得分:2)
当您需要保存对象的状态以供以后使用时,序列化对象非常有用。例如,您可能拥有一个保持用户首选项等的用户对象。由于Web是无状态的,因此每次请求都会丢失该对象。但是,如果您要序列化该对象并将其保存在会话变量中,则可以通过对其进行反序列化来重构该对象,从而使您不必重新构建上一次请求期间已有的新对象。
旁注:序列化然后反序列化对象也将完成对象的深层复制,其中(clone)只执行浅拷贝。
序列化示例
<?php
class User {
private $name = "";
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
/*
public function __sleep() {
print "sleep";
}
public function __wakeup() {
print "wakeup";
}
*/
}
$user = new User("Andrew Schools");
$userSerialized = serialize($user); // usually you would save this in a session or DB
$user2 = unserialize($userSerialized);
echo $user->getName();
echo "<br />";
echo $user2->getName();
echo "<br />";
var_dump($user);
var_dump($user2);
?>
这应该打印出以下内容:
Andrew Schools
Andrew Schools
class User#1 (1) {
private $name =>
string(14) "Andrew Schools"
}
class User#2 (1) {
private $name =>
string(14) "Andrew Schools"
}
正如您所看到的,我可以将对象恢复为序列化之前的对象。此外,__sleep()函数在序列化开始之前被触发,因此您可以进行任何清理。并且在反序列化后调用__wakeup,以便在对象恢复后可以执行一些其他任务。
答案 1 :(得分:0)
序列化是我们需要将数组存储到单个字符串中的过程。我主要序列化数组以在单个字段中存储在我的数据库中。
在您的代码中,我认为序列化不会有所帮助。