ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクトのシリアル化

PHPオブジェクトのシリアル化

伊谢尔伦
伊谢尔伦オリジナル
2016-11-23 13:48:011210ブラウズ

いわゆるシリアル化されたオブジェクトとは、オブジェクトをセッションに保存することです

PHPのすべての値は、関数serialize()を使用してバイトストリームを含む文字列を返すことで表現できます。 unserialize() 関数は、文字列を PHP の元の値に戻すことができます。 オブジェクトをシリアル化すると、オブジェクトのすべての変数が保存されますが、オブジェクトのメソッドは保存されず、クラス名のみが保存されます。

オブジェクトを unserialize() できるようにするには、オブジェクトのクラスが定義されている必要があります。クラス A のオブジェクトをシリアル化すると、オブジェクト内のすべての変数の値を含むクラス A に関連する文字列が返されます。 別のファイル内のオブジェクトを逆シリアル化する場合は、クラスを定義するファイルをインクルードするか、関数 spl_autoload_register() を使用して、逆シリアル化する前にオブジェクトのクラスを定義する必要があります。

<?php
    // classa.inc:
    class A {
        public $one = 1;
        public function show_one() {
            echo $this->one;
        }
    }
    // page1.php:
    include("classa.inc");
    $a = new A;
    $s = serialize($a);
    // 把变量$s保存起来以便文件page2.php能够读到
    file_put_contents(&#39;store&#39;, $s);
    // page2.php:
    // 要正确了解序列化,必须包含下面一个文件
    include("classa.inc");
    $s = file_get_contents(&#39;store&#39;);
    $a = unserialize($s);
    // 现在可以使用对象$a里面的函数 show_one()
    $a->show_one();
?>

アプリケーションが関数 session_register() を使用してオブジェクトをセッションに保存すると、これらのオブジェクトは各ページの最後で自動的にシリアル化され、各ページの先頭で逆シリアル化されます。 したがって、オブジェクトがセッションに保存されると、アプリケーション全体のページで使用できるようになります。ただし、session_register() 関数は php5.3.0 で非推奨となり、php6.0.0 ではサポートされなくなったため、この関数に依存しないでください。

後で使用できるようにアプリケーション内のオブジェクトをシリアル化するには、アプリケーション全体にオブジェクト クラス定義を含めることを強くお勧めします。 そうしないと、オブジェクトを逆シリアル化するときに、オブジェクトのクラスの定義が見つからず、メソッドのないクラス __PHP_Incomplete_Class_Name がオブジェクトのクラスとして使用され、無駄なオブジェクトが返される可能性があります。

つまり、上記の例では、session_register("a") を実行して変数 $a をセッションに配置するときに、ファイル page1.php と page2 だけではなく、ファイル classa.inc を各ページに含める必要があります。 php.


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。