|  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: 2020-06-24 09:21 UTC
From: grzegorz129 at gmail dot com Assigned: cmb (profile)
Status: Closed Package: Reflection related
PHP Version: 7.0Git-2015-06-11 (snap) OS: OSX, Linux
Private report: No CVE-ID: None
 [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

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.
 [2020-04-15 16:36 UTC]
The following pull request has been associated:

Patch Name: Fix #69804: ::getStaticPropertyValue() throws on protected props
On GitHub:
 [2020-06-24 09:20 UTC]
Automatic comment on behalf of
Log: Fix #69804: ::getStaticPropertyValue() throws on protected props
 [2020-06-24 09:20 UTC]
-Status: Assigned +Status: Closed
 [2020-06-24 09:21 UTC]
-Assigned To: laruence +Assigned To: cmb
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon Apr 22 03:01:32 2024 UTC