Bug #73657 [Ver->Csd]: Reflection property can't access to ArrayObject property
| From: | nikic@php.net | Date: | Fri, 28 Feb 2020 15:15:02 +0000 |
| Subject: | Bug #73657 [Ver->Csd]: Reflection property can't access to ArrayObject property | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-225792@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=73657&edit=1
ID: 73657
Updated by: nikic@php.net
Reported by: ilya at antipenko dot pp dot ua
Summary: Reflection property can't access to ArrayObject
property
-Status: Verified
+Status: Closed
Type: Bug
Package: Reflection related
Operating System: Any
PHP Version: 7.0.13
-Assigned To:
+Assigned To: nikic
Block user comment: N
Private report: N
New Comment:
This has been fixed in PHP 7.4: ArrayObject no longer reports the array contents as properties to
reflection.
Previous Comments:
------------------------------------------------------------------------
[2016-12-05 19:21:30] cmb@php.net
Indeed, the notice is caused by commit a1ed4ab3[1]. However, the behavior didn't make sense
before that commit, because the property's value was returned as NULL[2]. It seems to me that
::getProperties() should return 0 (as done by HHVM).
[1] <http://git.php.net/?p=php-src.git;a=commit;h=a1ed4ab3>
[2] <https://3v4l.org/UcTHf>
------------------------------------------------------------------------
[2016-12-05 17:02:24] ilya at antipenko dot pp dot ua
Seems caused by https://bugs.php.net/bug.php?id=72174
------------------------------------------------------------------------
[2016-12-05 17:00:11] ilya at antipenko dot pp dot ua
Description:
------------
Hello.
ReflectionObject::getProperties() returns property which added to ArrayObject with offsetSet(), but
this property can't be gotten by ReflectionProperty::getValue().
See https://3v4l.org/Y2CkO
Test script:
---------------
<?php
class A extends \ArrayObject {}
$a = new A;
$a->offsetSet('test', 'testValue');
$reflection = new \ReflectionObject($a);
$properties = $reflection->getProperties();
$c = count($properties);
echo $c . PHP_EOL;
if ($c) {
echo $properties[0]->getValue($a) . PHP_EOL;
}
Expected result:
----------------
I'm not sure what is expected behaviour, but it's strange to have abiliti get property of
ArrayObject and have not ability to get value of this property.
Variants:
1. Properties have not be returned by ReflectionObject::getProperties()
------ EXPECTED -----
1
testValue
------ EXPECTED -----
2. Property values should be accessible by ReflectionProperty::getValue()
------ EXPECTED -----
0
------ EXPECTED -----
Actual result:
--------------
1
Notice: Undefined property: A::$test in /in/FbMbQ on line 14
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=73657&edit=1