2016-10-01 16 views
0

私はPHPでカスタムクラスを持っています。クラスをシリアライズしてテキストファイルに保存すると、別のPHPファイルで後でそれをシリアル化できません。私は、オブジェクトにクラスの関数を呼び出すしようとすると、私は両方でクラスを含んで行う文字列からクラスをシリアル化しないPHPが動作しない

...非オブジェクトの[functioname()]メンバ関数へ

コールを取得しますPHPファイル。

PHPファイル1:

$myobject = new myclass(); 
$temp = serialize($myobject); 
file_put_contents('serializetest.txt', $temp); 

PHPファイル2:

$s = file_get_contents('serializetest.txt'); 
$newobject = unserialize($s); 

シリアライズされたクラスが適切にアンシリアライズなぜいくつかの理由がありますか?私は、オブジェクトを作成し、使用している場合

更新

それは私が無関係な保存されたオブジェクトをアンシリアライズすることができます主な機能です。クラスは刑事事件を探します。 2つのオブジェクトが全く異なっていても、新しいオブジェクトを作成して使用すると、保存された過去のオブジェクトを突然解凍できます。つまり、以下のコードは動作しますが、コードの最初の3行を削除してもそれはできません。

$tempcase = new Expungement(); 
$tempcase->searchCase('4B02305986','Public',true,false); 
echo "Case Number 1: " . $tempcase->caseno; 

$s = file_get_contents('serializetest.txt'); 
echo "Serialized Data: " . $s; 
$newcase = unserialize($s); 
echo "Case Number 2: " . $newcase->caseno; 
+1

クラス定義はファイル2に存在しますか?ファイル2は 'myclass'が何であるかを知る必要があります。 – Devon

+0

私は両方のページの上部にクラスファイルを含めます。 include_once 'myclass.php' – user3157910

+0

あなたは '$ newobject'をダンプして何が含まれているかを確認しようとしましたか? – Devon

答えて

0

「serializetest.txt」の内容と$ sの値を確認しましたか? ファイル1とファイル2は同じディレクトリにありますか? 多くの相互参照を持つ「複雑な」クラスがあると、unserializeがうまくいきません。

+0

はい、serialize.txtの内容は正常です。私のクラスにはいくつかのクラスが含まれていますが、それらはすべてmainclass.phpに含まれています。私はファイル2でこれを行うと動作することに気付きました。 '$ temp = new myObject(); $ temp-> runmainfunction();$ s =ファイル_get_contents( 'serializetest.txt'); $ newobject = unserialize($ s); ' これは意味がありますか?それ以前に無関係のオブジェクトを作成して使用すると、他のクラスが呼び出されますか? – user3157910

+0

file_get_contentの後に$ sの内容をチェックできますか? –

+0

私が$ sをエコーすると正しいデータがエコーされます。 mainclass.phpにいくつかのカスタムクラスが含まれています。他のマイナーなカスタムクラスをファイル2に個別に含める必要がありますか?または、「mainclass.php」にこれらのファイルを自動的に組み込むことができますか? – user3157910

関連する問題