0

効率的なPHPアプリケーションを作成するのにシリアル化がどのように役立つのかわかりません。

私は現在、PHPでスタンドアロンプ​​ロジェクトに取り組んでいます。このプロジェクトでは、フロントエンドHTMLをスローするためのメソッドを含む質問フィードを表示するクラスを作成し、処理部分も同じクラスで記述されています。

ほんの一例として、私の概説したクラスは次のとおりです

class QuestionFeed{
    protected $vars;

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

    public function InsertAnswers($answer_sanitized){
        .........
    }
}

そして、前部を表示するページと挿入部の別のページがあります。したがって、当然、最初に表示ページでクラスをインスタンス化し、次に処理ページでインスタンス化する必要があります。この時点で、オブジェクトをシリアル化することはどのように役立ちますか?そしてどうやって?

4

2 に答える 2

2

オブジェクトのシリアル化は、後で使用するためにオブジェクトの状態を保存する必要がある場合に役立ちます。たとえば、ユーザー設定などを保持するユーザーオブジェクトがあるとします。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);



?>

これにより、次のように出力されます。

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はシリアル化解除後に呼び出されるため、オブジェクトが復元された後に追加のタスクを実行できます。

于 2012-09-01T16:50:31.283 に答える
0

シリアル化は、配列を単一の文字列に格納する必要がある場合のプロセスです。私は主に配列をシリアル化して、データベースの単一フィールドに格納します。

あなたのコードでは、シリアル化が役に立たないと思います。

于 2012-09-01T08:39:51.063 に答える