You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If you try to change the property of an object that is inside a readonly array, based on syntax it thinks you're change the array itself and throws a Fatal, even though that property we're actually trying to change ($a->a[0]->b) is not readonly and can be changed. If the code to change the B::$b property is refactored like this the code works as expected:
This is related to #12244. For $foo['bar']->baz = 'baz';, both ['bar'] and ->baz are executed with BP_VAR_W. This used to be necessary, because -> would do autovivification itself. See PHP <8.0. https://3v4l.org/Q7RMT Since readonly disallows modification of arrays themselves, the fetch fails. Nowadays, we could switch to using BP_VAR_R for the ['bar'] fetch itself, but as #5250 has originally shown this breaks ext-simplexml. It also occurred to me that the current behavior is really useful for structs, which is why that PR was closed.
Description
The following code:
Resulted in this output:
But I expected this output instead:
If you try to change the property of an object that is inside a readonly array, based on syntax it thinks you're change the array itself and throws a Fatal, even though that property we're actually trying to change (
$a->a[0]->b
) is not readonly and can be changed. If the code to change theB::$b
property is refactored like this the code works as expected:PHP Version
8.2.23, 8.3.11
Operating System
No response
The text was updated successfully, but these errors were encountered: