Bug #80380 [Com]: Cannot access numeric property in ArrayObject
| From: | anton at rudnikov dot net | Date: | Fri, 20 Nov 2020 08:17:34 +0000 |
| Subject: | Bug #80380 [Com]: Cannot access numeric property in ArrayObject | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-230471@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=80380&edit=1
ID: 80380
Comment by: anton at rudnikov dot net
Reported by: anton at rudnikov dot net
Summary: Cannot access numeric property in ArrayObject
Status: Verified
Type: Bug
Package: SPL related
Operating System: any
PHP Version: 7.4.12
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
There's also interesting behaviour when I try to get array copy from ArrayObject using method
getArrayCopy.
Test script:
---------------
<?php
$object = new stdClass();
$object->prop = 'test1';
$object->{'1'} = 'test2';
$arrayObject = new ArrayObject($object);
$arrayCopy = $arrayObject->getArrayCopy();
var_dump($arrayCopy[1], $arrayCopy['1']); // can't access numeric property on array
copy
$array = (array) $object;
var_dump($array[1], $array['1']); // but it works if I just cast stdClass to array
var_dump($arrayCopy, $array); // let's see differences between arrays
Actual result:
--------------
Notice: Undefined offset: 1 in /tmp/preview on line 8
Notice: Undefined offset: 1 in /tmp/preview on line 8
NULL
NULL
string(4) "test"
string(4) "test"
array(1) {
["1"]=>
string(4) "test"
}
array(1) {
[1]=>
string(4) "test"
}
Previous Comments:
------------------------------------------------------------------------
[2020-11-19 12:32:08] cmb@php.net
The following pull request has been associated:
Patch Name: Fix #80380: Cannot access numeric property in ArrayObject
On GitHub: https://github.com/php/php-src/pull/6436
Patch: https://github.com/php/php-src/pull/6436.patch
------------------------------------------------------------------------
[2020-11-19 11:34:02] cmb@php.net
Given that numeric properties are accessible after array
conversion as of PHP 7.2.0, it seems wrong that this is not the
case with ArrayObjects.
------------------------------------------------------------------------
[2020-11-19 09:42:17] anton at rudnikov dot net
Changed package
------------------------------------------------------------------------
[2020-11-19 09:33:57] anton at rudnikov dot net
Description:
------------
I pass an object to ArrayObject constructor, and trying to access its properties. I can access
string properties, but I can't access numeric one
Test script:
---------------
<?php
$object = new stdClass;
$object->prop = 'test1';
$object->{'1'} = 'test2';
$arrayObject = new ArrayObject($object);
echo $arrayObject['prop']; // test1
echo $arrayObject['1']; // Undefined index
$arrayObject = new ArrayObject($object, ArrayObject::ARRAY_AS_PROPS);
echo $arrayObject->prop; // test1
echo $arrayObject->{'1'}; // Undefined index
Expected result:
----------------
test1
test2
test1
test2
Actual result:
--------------
test1
Notice: Undefined index: 1 in /in/9UdHs on line 9
test1
Notice: Undefined index: 1 in /in/9UdHs on line 13
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80380&edit=1