well today you can do foreach($it as &$value){...} unset($value); - which is pretty close, but it will break with $value="initial";foreach($it as &$value){...}unset($value); echo $value; here $value will not be "initial", it will be undefined, however you *CAN* do
$value="initial";(function()use(&$it){foreach($it as &$value){...}unset($value);})(); echo $value; and it will still contain "initial" and here the unset is even unnecessary, but yeah.. usually people do not go to such lengths to get a contained variable scope ^^ On Sat, 14 Aug 2021 at 15:23, Hossein Baghayi <hossein.bagh...@gmail.com> wrote: > On Fri, 13 Aug 2021 at 17:59, Nikita Popov <nikita....@gmail.com> wrote: > > > I'd like to address a common footgun when using foreach by reference: > > https://wiki.php.net/rfc/foreach_unwrap_ref > > > > Hello, > I had a question regarding this. > Wouldn't it be possible to limit ```$value```'s scope to only foreach's > block then discard it? Unless it was already defined elsewhere. > > ``` > foreach($nice_stuff as &$value) {} //we are done here and no need to keep > value around. > > echo $value; // $value is Undefined here. > > $value = null; > foreach($stuff as &$value) {} //we can keep the value here since it doesn't > belong to foreach. > > echo $value; // prints some fancy pancy stuff > ``` >