PHP类序列化/非序列化混淆

PHP类序列化/非序列化混淆,php,serialization,instantiation,Php,Serialization,Instantiation,我不明白序列化如何帮助我编写高效的PHP应用程序 我目前正在从事一个关于PHP的独立项目,我创建了一个类来显示一个问题提要,其中包含抛出前端HTML的方法,并且处理部分也在同一个类中编写 举个例子,我概述的课程如下 class QuestionFeed{ protected $vars; public function throwHTML($filter_params){ ........ } public function InsertAns

我不明白序列化如何帮助我编写高效的PHP应用程序

我目前正在从事一个关于PHP的独立项目,我创建了一个类来显示一个问题提要,其中包含抛出前端HTML的方法,并且处理部分也在同一个类中编写

举个例子,我概述的课程如下

class QuestionFeed{
    protected $vars;

    public function throwHTML($filter_params){
        ........
    }

    public function InsertAnswers($answer_sanitized){
        .........
    }
}
我有一个页面显示前面的部分,还有一个单独的页面显示插入部分。所以很自然,我必须先在显示页面实例化这个类,然后再在处理页面实例化它。
在这一点上,序列化对象有什么帮助吗?怎么做

当我们需要将数组存储到单个字符串中时,序列化是一个过程。我主要是序列化数组以在单个字段中存储在数据库中


在您的代码中,我认为序列化没有帮助。

当您需要保存对象的状态以供以后使用时,序列化对象非常有用。例如,您可能有一个保存用户首选项的用户对象,等等。由于web是无状态的,因此每次请求都会丢失该对象。但是,如果您要说序列化该对象并将其保存在会话变量中,则可以通过取消序列化来重构该对象,从而使您不必重构上一次请求期间已经拥有的新对象

另一方面:序列化然后取消序列化对象也将完成对象的深度复制,其中(克隆)将只执行浅层复制

序列化示例

<?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);



?>

如您所见,我可以将对象恢复到序列化之前的状态。此外,在序列化开始之前会触发_sleep()函数,因此您可以进行任何清理。非序列化后会调用_wakeup,以便在对象还原后可以执行一些附加任务。

不仅是数组,它还用于将对象存储到单个字符串中。因此,我在那个问题上寻求帮助:你需要使用“睡眠”和“唤醒”的神奇功能来让它像我描述的那样工作。这里的更多信息:假设我在上面的示例中将属性
$vars
的值设置为某物。我想重新使用另一页中的值。序列化是否有助于重用该值?我刚刚在回答中添加了一个示例。这表明您确实可以在其他页面上使用您的属性。谢谢,我知道了。我将很快在我的代码中使用它。我认为对我可能面临的问题进行回击是可以的。再次感谢D
Andrew Schools

Andrew Schools

class User#1 (1) {
  private $name =>
  string(14) "Andrew Schools"
}
class User#2 (1) {
  private $name =>
  string(14) "Andrew Schools"
}