class test
{
function getTime()
{
echo time();
}
}
$t = new test;
file_put_contents("./test.txt",serialize($t));
/*
此时test.text的文本内容如下:
O:4:"test":0:{}
我不明白的时序列化的时候怎么不有把类的方法getTime存入文本啊?而下面反序列化文本的时候,得到的对像
又可以找到getTime()方法,于是我又试着把test类序列化成文本之后,再把test类原形删除直接执行:
$newText = unserialize(file_get_contents("./test.txt"));
$newText->getTime();
然后报错,哪位能解释一下运行原理啊?
*/
$newText = unserialize(file_get_contents("./test.txt"));
$newText->getTime();

解决方案 »

  1.   

    class test
    {
        function getTime()
        {
            echo time();
        }
    }
    $t = new test;
    file_put_contents("./test.txt",serialize( $t->getTime() ));
      

  2.   

    我不明白的时序列化的时候怎么不有把类的方法getTime存入文本啊?
      

  3.   

    类原形肯定要保留的,unserialize的变量如果是对象,要重新构造的。
      

  4.   

    需要改两个地方:
    1,请把你的echo 改成return ,俺没听说过echo还能返回值的。
    2,new出来的实例,要用对象里的东西需要$t->getTime();class test
    {
        function getTime()
        {
            return time();
        }
    }
    $t = new test;
    file_put_contents("./test.txt",serialize($t->getTime()));
      

  5.   

    呵呵,LZ,序列化时,只保存了对像,没有保存对像的原型,你将原型删了,
    PHP 是解释语言啊程序调用时,找不到原型里的,放法,当然出错了