Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:115856 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 16688 invoked from network); 26 Aug 2021 13:51:53 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 26 Aug 2021 13:51:53 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 0F80A180540 for ; Thu, 26 Aug 2021 07:26:21 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-0.2 required=5.0 tests=BAYES_20,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Thu, 26 Aug 2021 07:26:20 -0700 (PDT) Received: by mail-lf1-f50.google.com with SMTP id b4so7165031lfo.13 for ; Thu, 26 Aug 2021 07:26:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=oexiwhgIN6JxfwD5oMNlVg872r2Twm5ujxSjRxBU+aw=; b=c12pFNRNY5440Nspzcl/DMZobVoXdZxSv5EGekQoY60it65f2moxoAIqC+/8lEVizu aXvlYSSksjwgiOTtMbOtDJcWcKqQrSa2gACoA1qJaLtQdq6Rv7AvtTsrIuFSj7FNDKpz mABgnE/WqkpUVKwQIbYWsEtYF+Xx29KsYK9/aT47k8e6FhsmGVRgqzzR6kU9ZTlBlLND UcW2yYWACP6Q2zcz0OIJ4P0T7JzTAmnmLdDe22F6hqtdMgnQgBKE1PcorWrx8H8aK52H 2H/i6cxmnSvzLxXv8fPMC+2wJ6c/pJstyecHdht2Ws662uPZgtYIdAK9FUbf92MfdflI eEeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=oexiwhgIN6JxfwD5oMNlVg872r2Twm5ujxSjRxBU+aw=; b=pE2Z7HHqamK7rmGTDxDTWTF4szihawsvyca4MWwmDd2pmf+AmQLpAWNdE0wIkdPFi8 SjVNEH4Y8UkHg/vbIRnm6vqbpK1Ptpb8rxyRwPd/4HM+of7r9wpCEFDdbl2HRwyH830m NOxIfc1V5qhkf86iZvl7dZlfwroV4TsnFzV90G36x2xTxNAMwNWOMK7MFXAlPLjbvBRF MKJ40UZp+TzUYWvYbghmcB1tTcI+vwyXhQLZZfjlAXkRDYVqi6oz0sQN3RJnGwN4kQfE Ud3ptCALwktSYZ6E0ZuCNB0/s+/NuJuEpyP2J7tudt8taqrdWR90bW9Ahy5vipD/xvaU 2+0Q== X-Gm-Message-State: AOAM531vPprmitsIwbj3WJTa5f0nrcwXwPj78sd2qfF0n2Z+jVrkkhuq 8v4Ik0mZeta9RMrjYuG96PceG6/QOGrA0VKNGjI= X-Google-Smtp-Source: ABdhPJwP9wXNB9NyjNwKSBb7rn3LcNMjaRWjZWJgvFa+Mzka/3poOV6/TOcnN7dbhHDVPXXHHfJMJFZHIOkagIV3vFU= X-Received: by 2002:a05:6512:2207:: with SMTP id h7mr3147703lfu.44.1629987978768; Thu, 26 Aug 2021 07:26:18 -0700 (PDT) MIME-Version: 1.0 References: <1AE70ED7-156F-4034-AD63-A3427C765DB7@gmail.com> In-Reply-To: <1AE70ED7-156F-4034-AD63-A3427C765DB7@gmail.com> Date: Thu, 26 Aug 2021 16:26:02 +0200 Message-ID: To: Claude Pache Cc: PHP internals Content-Type: multipart/alternative; boundary="00000000000076735105ca772651" Subject: Re: [PHP-DEV] Unwrap reference after foreach From: nikita.ppv@gmail.com (Nikita Popov) --00000000000076735105ca772651 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Aug 14, 2021 at 6:00 PM Claude Pache wrote= : > > Le 13 ao=C3=BBt 2021 =C3=A0 15:28, Nikita Popov a = =C3=A9crit : > > Hi internals, > > I'd like to address a common footgun when using foreach by reference: > https://wiki.php.net/rfc/foreach_unwrap_ref > > This addresses the issue described in the big red box at > https://www.php.net/manual/en/control-structures.foreach.php. While this > is > "not a bug" (as our bug tracker can regularly attest), it's rather > unexpected, and we could easily avoid it... > > Regards, > Nikita > > > A case that should be mentioned in the RFC is destructuring: > > ```php > foreach ($foo as [ $x, &$y ]) { /* .... */ } > ``` > https://3v4l.org/A5Vi7 > > I assume that the reference in `$y` would be unwrapped after the loop? > I clarified to the RFC to say that a) unwrapping also occurs if the loop is left using break, continue, goto etc. b) unwrapping occurs for array destructuring targets under the same limitation of "simple variables only". So yes, $y would be unwrapped in your example. Regards, Nikita --00000000000076735105ca772651--