メンバー データは復元されましたが、メソッドは復元されませんでした (ドキュメントによると)。これにより、メンバー変数にアクセスするには $obj2->x を使用するような方法しかなくなります (他に方法はありません)。自宅では試さないでください。
この問題を解決する方法はいくつかありますが、この簡潔な記事にはあまりにももったいないので省略します。私は、PHP の次のバージョンでの完全にシリアル化された機能を喜んで歓迎します。
データストレージ用のクラスの使用 PHP と OOP の非常に優れた点の 1 つは、何かを行うクラスを簡単に定義でき、それを使用したいときにいつでも対応するクラスを呼び出すことができることです。 ユーザーが製品 ID 番号を選択して製品を選択できる HTML フォームがあるとします。データベースに製品情報があり、その製品とその価格などを表示したいとします。さまざまなタイプの製品があり、同じアクションが製品ごとに異なる意味を持つ場合があります。たとえば、サウンドを表示するということは、そのサウンドを再生することを意味する場合がありますが、他の種類の製品の場合は、データベースに保存されている画像を表示することを意味する場合があります。 OOP または PHP を使用すると、コーディングを削減し、品質を向上させることができます。
製品クラスを定義し、それに必要なメソッド (例: 表示) を定義してから、製品クラス (SoundItem クラス、ViewableItem クラスなど) から派生した製品のタイプごとにクラスを定義し、
データベース内の各製品のタイプフィールドに従ってクラスに名前を付けます。一般的な製品テーブルには (ID、タイプ、価格、説明などのフィールド) が含まれます。その後、処理スクリプトでタイプ値を取得できます。データベースから取得し、type という名前のオブジェクトをインスタンス化します。
<?php
$obj=new $type(); ();
これは PHP の非常に優れた機能で、オブジェクトの種類を考慮せずに $obj の表示メソッドやその他のメソッドを呼び出すことができます。この手法を使用すると、新しいタイプのオブジェクトを追加するためにスクリプトを変更する必要はなく、それを処理するクラスを追加するだけで済みます。
この関数は非常に強力です。すべてのオブジェクトの型を考慮せずにメソッドを定義し、それらを異なるメソッドの異なるクラスに実装して、メイン スクリプトの任意のオブジェクトで使用します。if...else を使用する必要はありません。二人のプログラマー、
喜びだけです。
これで、プログラミングは簡単、メンテナンスは安価、そして再利用可能であるということに同意できましたか?
プログラマーのグループを管理している場合、作業の割り当ては簡単で、各人がオブジェクトの種類とそれを処理するクラスを担当することができます。
この技術を通じて国際化を実現できます。ユーザーが選択した言語分野などに応じて対応するクラスを適用するだけです。
コピーとクローン
$obj のオブジェクトを作成するとき、$obj2=$obj によってオブジェクトをコピーできます。新しいオブジェクトは $obj のコピー (参照ではありません) なので、$obj の値が次の位置にあります。その時の状態。場合によっては、これを実行したくない場合もあります。obj クラスのような新しいオブジェクトを生成したい場合は、 new ステートメントを使用してクラスのコンストラクターを呼び出すことができます。これは、PHP でもシリアル化と基本クラスを通じて実現できますが、他のすべてのクラスは基本クラスから派生する必要があります。
危険ゾーンに入る
オブジェクトをシリアル化すると、何らかの形式で文字列が得られます。興味があれば調べることができます。文字列にはクラスの名前が含まれています (すばらしい!)。
コードをコピー コードは次のとおりです:
<?php
$herring=serialize($obj);
$vec=explode(':',$herring) ;
$nam=str_replace(""",'',$vec[2]);
したがって、「Universe」クラスを作成し、すべてのクラスを強制的にユニバースから拡張すると仮定すると、次のようにクローン メソッドを定義できます。 :
コードをコピー コードは次のとおりです:
<?php
function clone() {
$herring=serialize($this);
$vec=explode(':' ,$herring); ;
$nam=str_replace(""",'',$vec[2]);
$ret=new $nam;
return $ret;
}
}
//次に
$obj= new Something() ;
//Universe から拡張
$other=$obj->clone();
得られるものは、新しいメソッドを使用して作成され、コンストラクターを呼び出します。生成されるオブジェクトは同じです。 。これがうまくいくかどうかはわかりませんが、経験則として、ユニバース クラスは派生クラスの名前を知っていると考えられます。限界があるのは想像力だけです。
このステートメントは現在時刻を書きます。
http://www.bkjia.com/PHPjc/320543.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/320543.html技術記事 PHP のシリアル化 (シリアル化) は、永続オブジェクトをサポートしていません。OOP では、永続オブジェクトは、複数のアプリケーションの参照で状態と機能を維持できるオブジェクトです。つまり、オブジェクトをファイルに保存する機能があります...
。