Problem with overwriting private property value with ReflectionProperty

From: Date: Mon, 19 Sep 2016 08:27:02 +0000
Subject: Problem with overwriting private property value with ReflectionProperty
Groups: php.internals 
Request: Send a blank email to internals+get-96026@lists.php.net to get a copy of this message
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 ________________________________

« previous php.internals (#96026) next »