|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #69804 ReflectionClass::getStaticPropertyValue() throws exception on protected props
Submitted: 2015-06-11 22:19 UTC Modified: 2015-06-13 23:13 UTC
From: grzegorz129 at gmail dot com Assigned: laruence (profile)
Status: Assigned Package: Reflection related
PHP Version: 7.0Git-2015-06-11 (snap) OS: OSX, Linux
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: grzegorz129 at gmail dot com
New email:
PHP Version: OS:


 [2015-06-11 22:19 UTC] grzegorz129 at gmail dot com
Trying to use ReflectionClass::getStaticPropertyValue() on protected static properties of class results in exception with information about non existing property. However ReflectionClass::getStaticProperties() returns that property with correct value on all supported PHP versions.
Adding ReflectionProperty::setAccessible(true) doesn't affect final effect.

Of course I can use getStaticProperties() array, but maybe getStaticPropertyValue() should be fixed or at least some documentation note be added?

After research I found it's related to #54620, but maybe setAccessible() should also affect getStaticPropertyValue() call?

Test script:

class foo {
    protected static $test = 'bar';

$classReflection = new ReflectionClass('foo');
$property = $classReflection->getProperty('test');

$property->setAccessible(true); //Changes nothing in that case

Actual result:


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2015-06-12 01:33 UTC]
-Assigned To: +Assigned To: laruence
 [2015-06-12 01:33 UTC]
hmm, setAccess doesn't change the property_info...  will think about a proper hack fix..
 [2015-06-13 13:31 UTC]
-Type: Bug +Type: Documentation Problem -Assigned To: laruence +Assigned To:
 [2015-06-13 13:31 UTC]
-Status: Open +Status: Assigned
 [2015-06-13 22:09 UTC] grzegorz129 at gmail dot com
@laruence: I saw your another comment about method behaving similar in PHP 5.6 - you're right, but I think implementation should be fixed instead of documentation, because that behaviour is little strange.
It shouldn't break any code - who's calling setAccess(true) and expect it wouldn't change that? :D
 [2015-06-13 23:13 UTC]
-Status: Open +Status: Assigned -Type: Documentation Problem +Type: Bug -Assigned To: +Assigned To: laruence
 [2015-06-13 23:13 UTC]
@laruence: IMO this is a bug.

It should just allow getStaticPropertyValue() to actually work on protected variables too. Or remove protected variables from getStaticProperties().

It definitely is a major inconsistency which should be considered as bug.

@grzegorz129: But don't expect ReflectionProperty::setAccessible() could change anything here.
setAccessible() only affects the scope of that particular ReflectionProperty object.
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Wed Oct 23 15:01:31 2019 UTC