2011-05-29 39 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序列化器使用方法序列化私有屬性和受保護屬性以及虛擬屬性。