Hi,

I have spent several hours with a strange problem with reflection.

There's an object of an external lib with a private field and I have to 
overwrite its values. Because there is no public method I am using 
ReflectionProperty like this:

$reflProp = new \ReflectionProperty(Extension::class, 'classes');
$reflProp->setAccessible(true);
$reflProp->setValue($extension,['new', 'values']);

var_export($extension->getClasses());

The field is of type array and contains several entries. The problem is, that 
the private field has not been overwritten by `$reflProp->setValue()`. Instead 
it looked like, the array of the private field has been merged with my new 
array.

I tried different things but nothing worked. I have tried to create a small 
script which could show the problem, but it wasn't reproducible.

The last thing I tried was, to call

var_export($reflProp->getValue($extension));

instead of

var_export($extension->getClasses());

That returns exactly the correct value. So my question is if somebody could 
imagine why `$reflProp->getValue()` returns the value I am trying to set, but 
accessing the field with an object member method (getClasses) returns a merged 
array.

I am using PHP 5.6.26 (x86, TS) on Windows 10.

Best regards,
Christian

Mit freundlichen Gr??en aus Paderborn

Christian Stoller
Softwareentwicklung

LEONEX Internet GmbH
Technologiepark 20
33100 Paderborn
Tel: 05251-14807-27
Fax: 05251-14807-30
HRB 8694 AG Paderborn
Gesch?ftsf?hrer: Stephan Winter

________________________________
Erfolgreiche E-Business L?sungen von LEONEX
Erfahren Sie mehr unter www.leonex.de
________________________________

Reply via email to