Req #67830 [Opn]: PropertyReflection->setAccessible(false) not affecting public properties

From: Date: Thu, 14 Aug 2014 04:17:27 +0000
Subject: Req #67830 [Opn]: PropertyReflection->setAccessible(false) not affecting public properties
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-187106@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=67830&edit=1 ID: 67830 Updated by: levim@php.net Reported by: leuffen at continue dot de Summary: PropertyReflection->setAccessible(false) not affecting public properties Status: Open Type: Feature/Change Request Package: Reflection related Operating System: Linux PHP Version: 5.5.15 Block user comment: N Private report: N New Comment: As a general PHP user I am shocked that you use it like this. Clearly abuse in my opinion. From a dev perspective, it probably should be supported if we claim it is supported in documentation. If not, it's just a bad API and we should change the API. Previous Comments: ------------------------------------------------------------------------ [2014-08-12 14:33:38] leuffen at continue dot de Description: ------------ At present ReflectionProperty::setAccessible() works only one-way: Changing unaccessible Properties to accessible. setAccessible(false) will have no affect. This is complicated for frameworks using __get() and __set(): Our frameworks use the magic __get() and __set() methods to validate data or to load Entities from Database. To take advantage from common IDE's code-completion we declare these properties public and unset them whithin the constructor (and store the actual data whithin a private or protected property). It would be a great advantage for working with these Objects if we could use the ReflectionProperty::setAccessible() Method to change property visibility to private and enforce use of __get() and __set() methods. Test script: --------------- class Entity { public $name = "direct access"; public function __construct() { $ref = new ReflectionObject($this); foreach ($ref->getProperties() as $prop) { $prop->setAccessible(FALSE); } } public function __get($name) { return "access over __get()"; } } $o = new Entity(); echo $o->name; Expected result: ---------------- "access over __get()" Actual result: -------------- "direct access" ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=67830&edit=1

« previous php.bugs (#187106) next »