2016-10-01 61 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); 

是有一些原因,一個序列化的類將適當反序列化?

更新

如果我創建一個對象,並使用它的主要的功能,我可以反序列無關保存的對象。班級搜查刑事案件。即使這兩個對象完全不同,一旦我創建並使用新對象,我可以突然反序列化保存的過去對象。即下面的工作,但如果我刪除了前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在同一個目錄中嗎? 如果您的「複雜」類有許多交叉引用,有時反序列化不起作用。

+0

是的,從serialize.txt的內容都很好。我的課程包含了其他幾個類,但它們都包含在mainclass.php中。我注意到它的工作原理,如果我在文件2中執行此操作。 '$ temp = new myObject(); $ temp-> runmainfunction(); $ s = file_get_contents('serializetest.txt'); $ newobject = unserialize($ s);' 這是否有意義?當我在它之前創建並使用一個不相關的對象時,它在調用其他類嗎? – user3157910

+0

你可以在file_get_content之後檢查$ s的內容嗎? –

+0

如果我回顯$ s,它回顯正確的數據。 我在mainclass.php中包含了幾個自定義類。我是否需要在我的文件2中單獨包含這些其他次要自定義類,或者將包含「mainclass.php」自動包含這些文件以供使用? – user3157910