Bug #80380 [Com]: Cannot access numeric property in ArrayObject

From: 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

« previous php.bugs (#230471) next »