Hi Tim

On Sun, Jan 18, 2026 at 1:28 PM Tim Düsterhus <[email protected]> wrote:
>
> On 1/15/26 07:36, Khaled Alam wrote:
> >     A potentially surprising case: some newly-valid writes can be a no-op
> >     when they target a temporary const value, e.g.
> >     - const X = [1,2,3];  X[] = 4;
> >        - const Y = ['a' => 1];  Y['b'] = 2;
> >
> > These become valid syntax but have no effect because the write happens on a
> > temporary basis.
> >
> > Feedback on semantics + expected behavior for the temporary-write case is
> > appreciated.
>
> This is too unexpected / error-prone for me. Trying to write into arrays
> should remain disallowed / an Error, since this is never (?) useful.

No strong opinions on my part, but I'd like to point out that similar
situations already exist.

https://3v4l.org/ARMMS#v8.4.14

    const C = [1, 2, 3];
    function foo(): array {
        return C;
    }
    foo()[] = 4;
    var_dump(C);

PHP will happily duplicate the array returned from foo() to append 4,
without warning. The original array in C remains unmodified. It might
make sense for ASSIGN_DIM to warn/throw if OP1 is not a "pointer"
(indirect, reference or object), as then the operation will never have
an effect. But it seems to me this is a distinct issue.

Ilija

Reply via email to