2011-05-29 5 views
9

Por favor, considere el siguiente código de ejemplo:serializados PHP Reflexión

<?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()); 

?> 

que produce el siguiente resultado:

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 

La cuestión está, hay una manera de serializar correctamente/objetos reflexión unserialize en PHP ?

Gracias.

Respuesta

2

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

serialización no funciona en virtuales propiedades y este problema se produce por lo general con las clases internas.

Tal vez sea ese el caso con este método. Sin embargo, no estoy seguro de que la documentación no esté clara. http://in3.php.net/manual/en/reflectionfunctionabstract.getparameters.php

+0

Sí, la descripción del error parece relevante. La documentación oficial indica que llamar al constructor incorporado es vital para extender (y, por lo tanto, inicializar) objetos Reflection, y no parece ocurrir en unserialize() –

0

Utilice el Serializador JMS para serializar propiedades privadas y protegidas y también propiedades virtuales mediante métodos.