2011-05-29 31 views
9

请考虑下面的示例代码:系列化PHP反思

<?php 

class a { 
    function b() {} 
} 

$r=new ReflectionMethod(new a, "b"); 
var_dump($r->getParameters()); 
$s=serialize($r); 
$r=unserialize($s); 
var_dump($r->getParameters()); 

?> 

产生以下的输出:

array(0) { } 
Fatal error: ReflectionFunctionAbstract::getParameters() [<a href='reflectionfunctionabstract.getparameters'>reflectionfunctionabstract.getparameters</a>]: Internal error: Failed to retrieve the reflection object in [...]test.php on line 13 

问题表示,有没有办法正确序列化PHP /反序列化的反思对象?

谢谢。

回答

2

http://bugs.php.net/bug.php?id=30324

序列化不会对虚拟 特性工作,这个问题通常 与内部类发生。

也许这种方法就是这种情况。但是,我不确定文档不清楚。 http://in3.php.net/manual/en/reflectionfunctionabstract.getparameters.php

+0

是的,错误描述似乎相关。官方文档指出,调用内置构造函数对于扩展(并因此初始化)Reflection对象是至关重要的,并且它似乎不会发生在unserialize() – 2011-05-29 16:33:37

0

使用JMS序列化器使用方法序列化私有属性和受保护属性以及虚拟属性。